Python 把零排序在负片之前?

Python 把零排序在负片之前?,python,arrays,sorting,numpy,Python,Arrays,Sorting,Numpy,我有一些数据需要排序,但是这个方法使用numpy.lexsort() 用于桌子上,例如 -500 0.5 0.0 0.0 0.0 0.0 -400 0.6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 返回数据,例如: 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -500 0.5 0.0 0.0 0.0 0.0

我有一些数据需要排序,但是这个方法使用numpy.lexsort()

用于桌子上,例如

-500    0.5 0.0 0.0 0.0 0.0
-400    0.6 0.0 0.0 0.0 0.0
0.0     0.0 0.0 0.0 0.0 0.0
0.0     0.0 0.0 0.0 0.0 0.0
返回数据,例如:

0.0     0.0 0.0 0.0 0.0 0.0
0.0     0.0 0.0 0.0 0.0 0.0
-500    0.5 0.0 0.0 0.0 0.0
-400    0.6 0.0 0.0 0.0 0.0

但这很奇怪,对吧?

正如塞伯格所说,你看到的并不是不正确的。Lexsort按提供的最后一个键进行排序,然后是倒数第二个键,依此类推,这可能有点落后。从文档字符串:

使用序列中的最后一个键 对于主排序顺序,为次排序的倒数第二个键 秩序等等。keys参数必须是 可以转换为相同形状的数组。如果提供了二维阵列 对于keys参数,它的行被解释为排序键和 排序是根据最后一行、最后第二行等进行的

鉴于此,您所看到的是正确排序的,但您可能想做的是:

data = np.zeros(shape=(n,6))
# some routine that partially populates the table
index = np.lexsort((data[:,1],data[:,0]))
data = data[index] # sort

正如塞伯格所指出的,你所看到的并不是错误的。Lexsort按提供的最后一个键进行排序,然后是倒数第二个键,依此类推,这可能有点落后。从文档字符串:

使用序列中的最后一个键 对于主排序顺序,为次排序的倒数第二个键 秩序等等。keys参数必须是 可以转换为相同形状的数组。如果提供了二维阵列 对于keys参数,它的行被解释为排序键和 排序是根据最后一行、最后第二行等进行的

鉴于此,您所看到的是正确排序的,但您可能想做的是:

data = np.zeros(shape=(n,6))
# some routine that partially populates the table
index = np.lexsort((data[:,1],data[:,0]))
data = data[index] # sort

最后一列是主键,因此它当然可以正确排序。您必须更改顺序。最后一列是主键,因此它当然可以正确排序。你必须改变你的订单。