有谁知道如何在numpy中组合整数索引?具体来说,我得到了一些np.where
的结果,我想提取它们之间常见的元素。
对于上下文,我试图用每个单元格的边界值之间的元素数量填充一个大的3d数组,即我有各个事件的记录,包括它们的时间,纬度和经度。我想将其网格化为3D频率矩阵,其中维度为时间,纬度和纬度。
我可以循环数组元素执行np.where(timeCondition & latCondition & lonCondition)
,填充的结果长度为where,但我认为这样效率非常低,因为你必须重复很多where
第
更好的是只为每个维度中的每个单元格列出一个轮询列表,然后循环逻辑组合它们?
答案 0 :(得分:4)
正如@ali_m所说,使用按位并且应该快得多,但要回答你的问题:
ravel_multi_index()
将多调度指数转换为1-dim指数。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)])
或者您可以直接使用ridx
:
a.ravel()[ridx]