numpy 中有二维 "where" 吗?

Is there a 2-D "where" in numpy?

这似乎是一个奇怪的问题,但它归结为一个非常简单的操作,我找不到与之对应的 numpy。我查看了 np.where 以及许多其他操作,但找不到执行此操作的任何操作:

a = np.array([1,2,3])
b = np.array([1,2,3,4])
c = np.array([i<b for i in a])

输出是一个二维数组 (3,4),由比较每个值的布尔值组成。

如果您询问如何在没有循环的情况下获得 c,试试这个

# make "a" a column vector
# > broadcasts to produce a len(a) x len(b) array
c = b > a[:, None]
c
array([[False,  True,  True,  True],
       [False, False,  True,  True],
       [False, False, False,  True]])

您可以扩展其他答案中的方法来获取 ab 的值。给定一个

的掩码
c = b > a[:, None]

您可以使用 np.wherenp.nonzero:

提取每个维度的索引
row, col = np.nonzero(c)

并使用索引得到相应的值:

ag = a[row]
bg = b[col]

ab 的元素可能在结果中重复。