如何在numpy中逻辑组合整数索引?

时间:2014-01-20 11:46:58

标签: python numpy

有谁知道如何在numpy中组合整数索引?具体来说,我得到了一些np.where的结果,我想提取它们之间常见的元素。

对于上下文,我试图用每个单元格的边界值之间的元素数量填充一个大的3d数组,即我有各个事件的记录,包括它们的时间,纬度和经度。我想将其网格化为3D频率矩阵,其中维度为时间,纬度和纬度。

我可以循环数组元素执行np.where(timeCondition & latCondition & lonCondition),填充的结果长度为where,但我认为这样效率非常低,因为你必须重复很多where

更好的是只为每个维度中的每个单元格列出一个轮询列表,然后循环逻辑组合它们?

1 个答案:

答案 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]