Python论坛  - 讨论区

标题:有关数组排序的问题

2010年11月10日 星期三 22:08

大家好

我正在学 python ,用到了numpy
我现在有一个数组(不知道是不是应该叫数组)
比如 a = numpy.array( [ [111, 54, 555], [0, 1, 2 ] ] )
我想让[111, 54, 555]这一组数从小到大排序,[0, 1, 2]这组数还是要跟以前那个数在同一列。
也就是说最后的结果希望是:
array ( [ [54, 111, 555]
            [  1,     0,     2] ] )

之前想过用字典来处理,但是在[111, 54, 555]这组数里面可能出现相同的值
不知道哪位能 帮忙 解决 一下,谢谢!

2010年11月10日 星期三 23:31

我有一个比较麻烦的方案

alist = zip([111,54,555],[0,1,2])

alist.sort()

alist = [[x[0] for x in alist],[x[1] for x in alist]]

然后测试下print  alist就是你想要的结果了。

2010年11月11日 星期四 09:45

不麻烦,谢谢了!

2010年11月11日 星期四 10:18

alist = zip([111,54,555],[0,1,2])

alist.sort()

最后一步改一下 alist = zip(*[[x[0],x[1]] for x in alist]) 比较易读,貌似效率也更高一点

2010年11月11日 星期四 10:52

之前很少用到zip,以至于之前都不知道还可以带*号,学习了

2010年11月12日 星期五 08:51

这里*号的语法做什么解释呢。

2010年11月12日 星期五 09:42

zip() in conjunction with the * operator can be used to unzip a list

2010年11月14日 星期日 10:21

用argsort获得排序下标,然后再用下标创建一个新数组:

a[:,numpy.argsort(a[0,:])]

2010年11月14日 星期日 19:54

学习了,谢谢

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号