有谁知道如何在 numpy 中组合整数索引?具体来说,我已经得到了几个结果np.where
,我想提取它们之间的共同元素。
对于上下文,我试图用每个单元格边界值之间的元素数量填充一个大型 3d 数组,即我有各个事件的记录,包括它们的时间、纬度和经度。我想将其网格化为 3D 频率矩阵,其中维度为时间、纬度和经度。
我可以循环数组元素np.where(timeCondition & latCondition & lonCondition)
,使用 where 结果的长度进行 , 填充,但我认为这效率非常低,因为您必须重复很多 s where
。
更好的方法是只拥有每个维度中每个单元格的位置列表,然后循环遍历它们的逻辑组合?
正如@ali_m所说,使用按位应该更快,但要回答你的问题:
ravel_multi_index()
将多维索引转换为一维索引。intersect1d()
以获取两种情况下的索引。unravel_index()
将 1-dim 索引转换回多维索引。这是代码:
import numpy as np
a = np.random.rand(10, 20, 30)
idx1 = np.where(a>0.2)
idx2 = np.where(a<0.4)
ridx1 = np.ravel_multi_index(idx1, a.shape)
ridx2 = np.ravel_multi_index(idx2, a.shape)
ridx = np.intersect1d(ridx1, ridx2)
idx = np.unravel_index(ridx, a.shape)
np.allclose(a[idx], a[(a>0.2) & (a<0.4)])
Run Code Online (Sandbox Code Playgroud)
或者您可以ridx
直接使用:
a.ravel()[ridx]
Run Code Online (Sandbox Code Playgroud)