如何检查 Numpy 数组的每一行是否包含在辅助数组中?
How do you Check if each Row of a Numpy Array is Contained in a Secondary Array?
我的问题与 testing whether a Numpy array contains a given row 类似,但我需要对链接问题中提供的方法进行重要扩展;链接的问题是询问如何检查数组中的每一行是否与 其他一行 相同。这个问题的重点是对 多行 做这件事,其中一个并没有明显地跟随另一个。
假设我有一个数组:
array = np.array([[1, 2, 4], [3, 5, 1], [5, 5, 1], [1, 2, 1]])
我想知道这个数组的每一行是否都在一个辅助数组中:
check_array = np.array([[1, 2, 4], [1, 2, 1]])
理想情况下,这看起来像这样:
is_in_check = array in check_array
其中 is_in_check 看起来像这样:
is_in_check = np.array([True, False, False, True])
我意识到对于非常小的数组,使用列表理解或类似的东西会更容易,但是这个过程必须对 106 行的数组有效.
我看到检查单行的正确方法是:
is_in_check_single = any((array[:]==[1, 2, 1]).all(1))
但理想情况下,我想将其概括为多行,以便该过程被矢量化。
实际上,我希望看到每个数组的以下维度:
array.shape = (1000000, 3)
check_array.shape = (5, 3)
广播是一个选项:
import numpy as np
array = np.array([[1, 2, 4], [3, 5, 1], [5, 5, 1], [1, 2, 1]])
check_array = np.array([[1, 2, 4], [1, 2, 1]])
is_in_check = (check_array[:, None] == array).all(axis=2).any(axis=0)
生产:
[ True False False True]
以其他方式广播:
is_in_check = (check_array == array[:, None]).all(axis=2).any(axis=1)
也生产
[ True False False True]
我的问题与 testing whether a Numpy array contains a given row 类似,但我需要对链接问题中提供的方法进行重要扩展;链接的问题是询问如何检查数组中的每一行是否与 其他一行 相同。这个问题的重点是对 多行 做这件事,其中一个并没有明显地跟随另一个。
假设我有一个数组:
array = np.array([[1, 2, 4], [3, 5, 1], [5, 5, 1], [1, 2, 1]])
我想知道这个数组的每一行是否都在一个辅助数组中:
check_array = np.array([[1, 2, 4], [1, 2, 1]])
理想情况下,这看起来像这样:
is_in_check = array in check_array
其中 is_in_check 看起来像这样:
is_in_check = np.array([True, False, False, True])
我意识到对于非常小的数组,使用列表理解或类似的东西会更容易,但是这个过程必须对 106 行的数组有效.
我看到检查单行的正确方法是:
is_in_check_single = any((array[:]==[1, 2, 1]).all(1))
但理想情况下,我想将其概括为多行,以便该过程被矢量化。
实际上,我希望看到每个数组的以下维度:
array.shape = (1000000, 3)
check_array.shape = (5, 3)
广播是一个选项:
import numpy as np
array = np.array([[1, 2, 4], [3, 5, 1], [5, 5, 1], [1, 2, 1]])
check_array = np.array([[1, 2, 4], [1, 2, 1]])
is_in_check = (check_array[:, None] == array).all(axis=2).any(axis=0)
生产:
[ True False False True]
以其他方式广播:
is_in_check = (check_array == array[:, None]).all(axis=2).any(axis=1)
也生产
[ True False False True]