【问题标题】:Sort a numpy array by another array, along a particular axis, using less memory使用更少的内存,沿特定轴按另一个数组对 numpy 数组进行排序
【发布时间】:2011-09-03 23:11:25
【问题描述】:

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

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

【问题讨论】:

  • 链接问题中的数组a 是否总是由相等数量的块组成?在这种情况下,很容易给出更好的解决方案。
  • 问得好,斯文。在我的真实代码中,要排序的数组实际上是随机的,我只是举了一个相当简单的例子来说明。

标签: python sorting multidimensional-array numpy


【解决方案1】:

记录数组能满足您的目的吗?

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

【讨论】:

  • 我应该补充一点,这与this question 非常相似,但由于它没有明确解决多维数组,我认为值得提出一个单独的问题。
  • 很好,我不知道记录数组。我会试试这个。
  • 记录数组方法正是我想要的。很好的答案。
  • 您也可以使用 'order' 关键字参数指定记录数组的哪个字段进行排序,这很棒。
猜你喜欢
  • 2011-09-03
  • 1970-01-01
  • 2020-01-15
  • 2011-02-11
  • 2016-04-30
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多