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]])
您可以扩展其他答案中的方法来获取 a
和 b
的值。给定一个
的掩码
c = b > a[:, None]
您可以使用 np.where
或 np.nonzero
:
提取每个维度的索引
row, col = np.nonzero(c)
并使用索引得到相应的值:
ag = a[row]
bg = b[col]
a
和 b
的元素可能在结果中重复。
这似乎是一个奇怪的问题,但它归结为一个非常简单的操作,我找不到与之对应的 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]])
您可以扩展其他答案中的方法来获取 a
和 b
的值。给定一个
c = b > a[:, None]
您可以使用 np.where
或 np.nonzero
:
row, col = np.nonzero(c)
并使用索引得到相应的值:
ag = a[row]
bg = b[col]
a
和 b
的元素可能在结果中重复。