访问大型 numpy 数组,同时保留其顺序

Posted

技术标签:

【中文标题】访问大型 numpy 数组,同时保留其顺序【英文标题】:Accessing a large numpy array while preserving its order 【发布时间】:2021-01-12 12:24:12 【问题描述】:

我想通过索引idx 访问一个numpy 数组data,但仍保留data 中的顺序。下面是一个示例,其中数组的访问顺序与原始数组中的顺序不同。

In [125]: data = np.array([2, 2.2, 2.5])

In [126]: idx=np.array([1,0])

In [127]: data[idx]
Out[127]: array([2.2, 2. ])

我希望得到 [2,2.2] 代替。有没有一种高效的方法来做到这一点?在我的问题设置中,我有超过一百万个浮点数的数据,以及 10 万个整数的 idx。

重要信息:如果需要,可以对数组 data 进行预处理。数据来自图像处理工作。例如,如果我们需要预先对data进行排序,那么在衡量性能时不会考虑排序所消耗的时间。另一方面,idx 是我不想在运行时处理太多的东西,因为必须计算花费在它上面的时间。例如。 使用 O(n log n) 算法对 idx 进行排序可能过于昂贵。

【问题讨论】:

【参考方案1】:

创建一个布尔“掩码”

 mask = np.zeros(data.shape, bool)
 mask[idx] = True
 res = data[mask]

【讨论】:

【参考方案2】:

这样的?还是我没看懂?

data=np.array([2,2.2,2.5])
idx=np.array([1,0])
data[np.sort(idx)]

【讨论】:

其中最后一条命令的输出是:>>> array([2. , 2.2]) 谢谢,但是“使用 O(n log n) 算法对 idx 进行排序可能太昂贵了。”另一方面,如果需要,可以对数据进行排序。所以我上面的cmets。

以上是关于访问大型 numpy 数组,同时保留其顺序的主要内容,如果未能解决你的问题,请参考以下文章

保留关联 PHP 数组的顺序,同时通过 ajax 将其传递给 javascript

如何在 JavaScript 中反转数组,同时保留原始数组的原始值? [复制]

Pandas:从 2D numpy 数组创建一个数据框,保留它们的顺序

酸洗大型 NumPy 数组

对混合整数和字符串的 ArrayList 进行排序,同时保留字符串和整数的相对顺序

如何在保持分辨率的同时将2D float numpy数组无损保存到灰度图像中?