python - Numpy 两个二维数组的逐元素 isin

标签 python arrays numpy isin

我有两个数组:

a = np.array([[1, 2], [3, 4], [5, 6]])

b = np.array([[1, 1, 1, 3, 3],
              [1, 2, 4, 5, 9],
              [1, 2, 3, 4, 5]])

预期的输出将与数组“a”的形状匹配,并且将是:

array([True, False], [False, True], [True, False])

数组 a 和 b 的第一维大小始终匹配(在本例中为 3)。

我希望计算的是每个数组的每个索引(0到2,因为这里有3个维度)是数组“a”中的每个数字是否存在于数组“b”相应的第二个维度中。

我可以使用以下代码在循环中解决这个问题,但我想对其进行矢量化以获得速度提升,但在这里坐了几个小时,我无法弄清楚:

output = np.full(a.shape, False)
assert len(a) == len(b)
for i in range(len(a)):
    output[i] = np.isin(a[i], b[i])

感谢您的指导!任何事情都会非常感激:)

最佳答案

正确地 reshape 数组,以便它们在比较时可以正确广播:

(a[...,None] == b[:,None]).any(2)

#[[ True False]
# [False  True]
# [ True False]]
  • a[...,None] 在末尾添加一个额外的维度,形状为 (3, 2, 1);
  • b[:,None] 插入尺寸作为第二个轴,形状为 (3, 1, 5)
  • 当您比较两个数组时,两者都会被广播到 (3, 2, 5),因此本质上您将 a 行中的每个元素与每个元素进行比较在b的相应行中;
  • 最后您可以检查 a 中的每个元素是否有匹配项;

关于python - Numpy 两个二维数组的逐元素 isin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68512446/

相关文章:

python - 使用 Python 在非常大的文件中查找字节序列

python - 从列表生成 wxPython 小部件组

ruby : how to prevent modification of an array instance variable through an attribute reader

java - 如何对通用数组进行排序?

Python 2.7 如何打印 unicode-escape 格式字符串?

python - 使用 Python 的新正则表达式模块创建模糊匹配异常

c - 将文件中的字符串分配给字符串数组时遇到问题

python - 根据最大值和最小值填写缺失的日期 pandas

python - NumPy 中 astype 的有效参数

python - 如何在Python中优化非线性方程?