gpt4 book ai didi

python - 如何找到二维 numpy 数组的行交集?

转载 作者:太空宇宙 更新时间:2023-11-03 20:41:09 24 4
gpt4 key购买 nike

我正在寻找一种有效的方法来获取两个二维 numpy ndarray 的行交集。每行只有一个交叉点。例如:

[[1, 2], ∩ [[0, 1], -> [1,
[3, 4]] [0, 3]] 3]

在最好的情况下,零应该被忽略:

[[1, 2, 0], ∩ [[0, 1, 0], -> [1,
[3, 4, 0]] [0, 3, 0]] 3]

我的解决方案:

import numpy as np

arr1 = np.array([[1, 2],
[3, 4]])
arr2 = np.array([[0, 1],
[0, 3]])
arr3 = np.empty(len(arr1))

for i in range(len(arr1)):
arr3[i] = np.intersect1d(arr1[i], arr2[i])

print(arr3)
# [ 1. 3.]

我有大约 100 万行,因此向量化操作是最优选的。欢迎您使用其他Python包。

最佳答案

您可以使用np.apply_along_axis 。我写了一个解决方案,填充到 arr1 的大小。没有测试效率。

    import numpy as np

def intersect1d_padded(x):
x, y = np.split(x, 2)
padded_intersection = -1 * np.ones(x.shape, dtype=np.int)
intersection = np.intersect1d(x, y)
padded_intersection[:intersection.shape[0]] = intersection
return padded_intersection

def rowwise_intersection(a, b):
return np.apply_along_axis(intersect1d_padded,
1, np.concatenate((a, b), axis=1))

result = rowwise_intersection(arr1,arr2)

>>> array([[ 1, -1],
[ 3, -1]])

如果你知道交集中只有一个元素,你可以使用

    result = rowwise_intersection(arr1,arr2)[:,0]

>>> array([1, 3])

您还可以修改 intersect1d_padded 以返回具有交集值的标量。

关于python - 如何找到二维 numpy 数组的行交集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56849086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com