python - 如何构造一个适合 numpy 排序的数组?

标签 python algorithm arrays numpy

我需要同时对两个数组进行排序,或者更确切地说,我需要对其中一个数组进行排序,并在排序时将其关联数组的相应元素带入其中。也就是说,如果数组是 [(5, 33), (4, 44), (3, 55)] 并且我按第一个轴(在 dtype='alpha' 下方标记)排序,那么我想要:[(3.0, 55.0 ) (4.0, 44.0) (5.0, 33.0)]。这些是非常大的数据集,我需要先排序(为了 nlog(n) 速度),然后再进行其他操作。我不知道如何以正确的方式合并我的两个单独的数组以使排序算法正常工作。我认为我的问题很简单。我尝试了三种不同的方法:

import numpy
x=numpy.asarray([5,4,3])
y=numpy.asarray([33,44,55])

dtype=[('alpha',float), ('beta',float)]

values=numpy.array([(x),(y)])
values=numpy.rollaxis(values,1)
#values = numpy.array(values, dtype=dtype)
#a=numpy.array(values,dtype=dtype)
#q=numpy.sort(a,order='alpha')
print "Try 1:\n", values

values=numpy.empty((len(x),2))
for n in range (len(x)):
        values[n][0]=y[n]
        values[n][1]=x[n]
print "Try 2:\n", values
#values = numpy.array(values, dtype=dtype)
#a=numpy.array(values,dtype=dtype)
#q=numpy.sort(a,order='alpha')

###
values = [(x[0], y[0]), (x[1],y[1]) , (x[2],y[2])]
print "Try 3:\n", values
values = numpy.array(values, dtype=dtype)
a=numpy.array(values,dtype=dtype)
q=numpy.sort(a,order='alpha')

print "Result:\n",q

我注释掉了第一次和第二次尝试,因为它们会产生错误,我知道第三次尝试会成功,因为那反射(reflect)了我在 RTFM 时看到的情况。给定数组 x 和 y(非常大,仅显示示例),我如何构造可以由 numpy.sort 正确调用的数组(称为值)?

*** Zip 很好用,谢谢。奖励问题:稍后如何将排序后的数据再次解压缩到两个数组中?

最佳答案

我想你想要的是 zip 功能。如果你有

x = [1,2,3]
y = [4,5,6]

然后 zip(x,y) == [(1,4),(2,5),(3,6)]

所以你的数组可以用

a = numpy.array(zip(x,y), dtype=dtype)

关于python - 如何构造一个适合 numpy 排序的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/560283/

相关文章:

python - 如何使用pyqt4刷新小部件中的内容?

algorithm - 迭代加深与深度优先搜索

algorithm - 查找2个节点之间是否存在路径深度优先搜索

java - 整数数组中的重复数字(Java 基础级别)和时间复杂度

python - Matplotlib:绘制具有数据坐标中给定宽度的线

python - 如何在我的损失函数中添加 L2 正则化项

javascript - 使用 JS 获取单选按钮值数组

java - 从 .data 文件读取到 Java - 如何将信息存储在数组数组中?

javascript - React TypeError : skills. 映射不是函数

python - 仅测量两个图像之间沿一个方向的位移