查看给定坐标处的点在矩阵中是否为真
Look if points at given coordinates are True in a matrix
我有一个大小为 MxN 的 bool 类型的 numpy 矩阵 A。
比起我有一个 ROWSx2 的数组 B,它在每一行中包含一对坐标 x、y。我想找到矩阵 A 的坐标列表,其索引包含在数组 A 中并且其值等于 True。
我尝试使用此命令,但它 returns 是一个 3 维数组,我不明白为什么:
intersections = A[A[B] == True]
IIUC 你可以用元组版本或切片版本索引到 A
和 B
以获得 B
中有效坐标的掩码,就像这样 -
mask = A[tuple(B.T)] #or A[B[:,0], B[:,1]]
然后,将有效坐标索引到B
-
out = B[mask]
样本运行-
In [43]: A
Out[43]:
array([[False, True, True, True, True],
[ True, True, True, False, True],
[False, False, False, True, False],
[ True, True, True, False, True],
[False, True, False, True, True],
[False, True, True, True, True]], dtype=bool)
In [44]: B
Out[44]:
array([[5, 4],
[1, 3],
[4, 4],
[5, 4]])
In [45]: mask = A[tuple(B.T)]
# Mask of valid B coordinates
In [47]: mask
Out[47]: array([ True, False, True, True], dtype=bool)
In [46]: B[mask]
Out[46]:
array([[5, 4], # [1,3] gone because A[1,3] = False
[4, 4],
[5, 4]])
我有一个大小为 MxN 的 bool 类型的 numpy 矩阵 A。 比起我有一个 ROWSx2 的数组 B,它在每一行中包含一对坐标 x、y。我想找到矩阵 A 的坐标列表,其索引包含在数组 A 中并且其值等于 True。 我尝试使用此命令,但它 returns 是一个 3 维数组,我不明白为什么:
intersections = A[A[B] == True]
IIUC 你可以用元组版本或切片版本索引到 A
和 B
以获得 B
中有效坐标的掩码,就像这样 -
mask = A[tuple(B.T)] #or A[B[:,0], B[:,1]]
然后,将有效坐标索引到B
-
out = B[mask]
样本运行-
In [43]: A
Out[43]:
array([[False, True, True, True, True],
[ True, True, True, False, True],
[False, False, False, True, False],
[ True, True, True, False, True],
[False, True, False, True, True],
[False, True, True, True, True]], dtype=bool)
In [44]: B
Out[44]:
array([[5, 4],
[1, 3],
[4, 4],
[5, 4]])
In [45]: mask = A[tuple(B.T)]
# Mask of valid B coordinates
In [47]: mask
Out[47]: array([ True, False, True, True], dtype=bool)
In [46]: B[mask]
Out[46]:
array([[5, 4], # [1,3] gone because A[1,3] = False
[4, 4],
[5, 4]])