Numpy:条件搜索排序

4

我有以下数组

I0 = np.array([1, 0, 0, 0, 1, 0, 0, 1])
X0 = np.array([1, 3, 4, 4, 5, 6, 7, 8])

I1 = np.array([1, 0, 0, 1, 1, 0, 1])
X1 = np.array([1, 4, 5, 6, 7, 8, 9])

对于 X1I1 == 1 的值,我想要找到在 X0 中的索引,满足条件 (I0 == 1) & (X0 <= X1)

indices = np.searchsorted(X0[I0 == 1], X1[I1 == 1], side='right')-1
X0[I0 == 1][indices] # [1, 5, 5, 8]

但我想要的并不是X0[I0 == 1]中的索引,而是X0中的索引。

1个回答

3
对应元素的索引如下:
Q0 = np.arange(X0.size)[I0 == 0]

所以
indices = Q0[indices]

顺便说一下,我强烈建议将你的I*数组布尔化。例如:

I0 = np.array([True, False, False, False, True, False, False, True])

这将使您能够直接使用它进行索引,而无需创建另一个临时数组:
X0[I0]

我认为这并不无关紧要,因为您所建议的仅在I0为布尔值时才有效。此外,还有一些numpy函数可用(wherenonzeroflatnonzero)。 - Paul Panzer
1
@Paul。已更新。那是我的错误。这些函数会创建更多的临时数组,我建议OP可以部分避免。 - Mad Physicist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接