从this question的答案,我学会了如何按照特定轴的另一个numpy数组a
的值对一个numpy数组b
的条目进行排序。
但是,此方法需要创建几个与a
大小相同的中间数组,每个维度a
一个。我的一些阵列非常大,这变得不方便。有没有办法实现使用更少内存的相同目标?
答案 0 :(得分:2)
记录阵列是否符合您的目的?
>>> a = numpy.zeros((3, 3, 3))
>>> a += numpy.array((1, 3, 2)).reshape((3, 1, 1))
>>> b = numpy.arange(3*3*3).reshape((3, 3, 3))
>>> c = numpy.array(zip(a.flatten(), b.flatten()), dtype=[('f', float), ('i', int)]).reshape(3, 3, 3)
>>> c.sort(axis=0)
>>> c['i']
array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
[[18, 19, 20],
[21, 22, 23],
[24, 25, 26]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]]])
生成耦合数组的更简洁方法:
>>> c = numpy.rec.fromarrays([a, b], dtype=[('f', float), ('i', int)])
或
>>> c = numpy.rec.fromarrays([a, b], names='f, i')