使用较少的内存沿着特定轴对另一个数组排序numpy数组

时间:2011-05-28 14:16:55

标签: python sorting multidimensional-array numpy

this question的答案,我学会了如何按照特定轴的另一个numpy数组a的值对一个numpy数组b的条目进行排序。

但是,此方法需要创建几个与a大小相同的中间数组,每个维度a一个。我的一些阵列非常大,这变得不方便。有没有办法实现使用更少内存的相同目标?

1 个答案:

答案 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')