gpt4 book ai didi

python - 比较两个 numpy 数组以符合两个条件

转载 作者:行者123 更新时间:2023-12-04 09:05:24 24 4
gpt4 key购买 nike

考虑两个具有相同形状的 numpy 数组,A 和 B,由 1 和 0 组成。显示了一个小例子:

A = [[1 0 0 1]         B = [[0 0 0 0]
[0 0 1 0] [0 0 0 0]
[0 0 0 0] [1 1 0 0]
[0 0 0 0] [0 0 1 0]
[0 0 1 1]] [0 1 0 1]]
我现在想为两个 bool 变量 赋值测试 1 测试 2 如下:
测试 1 :是否至少有一个实例,其中 A 中的 1列和相同的 1 B列的行差异正好是 1 还是 2?如果是这样,那么 测试 1 = 真,否则为假。
在上面的例子中,两个数组的第 0 列都有相距 2 行的 1,所以 测试 1 = 真的。 (第 2 列中还有其他实例,但这并不重要——我们只需要一个实例。)
测试 2 : 做 A 中的 1 值和 B都有不同的数组地址?如果是这样,那么 测试 2 = 真,否则为假。
在上面的例子中,两个数组都有 [4,3] = 1 , 所以 测试 2 = 错误。
我正在努力寻找一种有效的方法来做到这一点,并希望得到一些帮助。

最佳答案

这是一种测试两个数组是否在同一列中相隔一个元素的条目(仅在一个方向上)的简单方法:

(A[1:, :] * B[:-1, :]).any(axis=None)
所以你可以做
test1 = (A[1:, :] * B[:-1, :] + A[:-1, :] * B[1:, :]).any(axis=None) or (A[2:, :] * B[:-2, :] + A[:-2, :] * B[2:, :]).any(axis=None)
第二个测试可以通过将位置转换为索引、将它们堆叠在一起并使用 np.unique 来完成。来计算重复的数量。重复项只能来自两个数组中的相同索引,因为数组永远不会有重复索引。我们可以使用 flatnonzero 进一步加快计算速度。而不是 nonzero :
test2 = np.all(np.unique(np.concatenate((np.flatnonzero(A), np.flatnonzero(B))), return_counts=True)[1] == 1)
更有效的测试将使用 np.intersect1d以类似的方式:
test2 = not np.intersect1d(np.flatnonzero(A), np.flatnonzero(B)).size

关于python - 比较两个 numpy 数组以符合两个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63460140/

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