我有两个多维数组,我想为那些匹配和不匹配的值评估和分配值。
array_1 = array([[1,2,2], [1,2,3],[1,2,1]])
array_2 = array([[1,1,2], [2,2,3],[3,1,1]])
这个想法是,对于数组 1 的每个成员,如果值相同,我想分配 0,如果不是,我想分配不同的值。逻辑是这样的。
(array_1 ==1 and array_2 ==1) = 0
(array_1 ==1 and array_2 ==2) = 10
(array_1 ==1 and array_2 ==3) = 15
(array_1 ==2 and array_2 ==1) = 5
(array_1 ==2 and array_2 ==2) = 0
(array_1 ==2 and array_2 ==3) = 15
(array_1 ==3 and array_2 ==1) = 5
(array_1 ==3 and array_2 ==2) = 10
(array_1 ==3 and array_3 ==3) = 0
总体目标是检测变化。此方法的简要说明可在
上找到
https://www.e-education.psu.edu/geog883/node/496
最佳答案
首先:我不熟悉您在帖子中显示的数组格式。我从未见过在 Python 中仅使用方括号实例化数组。这不是函数调用。
第二:您的问题可能没有完全说明。但是:如果您向我们展示了输入数组中所有可能的值,则只有 1、2 和 3 是可能的。在这种情况下,array_1 和 array_2 中的元素只有 9 种可能的配对,并且您想要作为输出的值可以轻松存储在 3 x 3 查找表中。
最后:我使用 Numpy。您似乎想要数组,而 Numpy 很常见并且可以很好地处理数组。
import numpy as np
from itertools import product
arr1 = np.array([[1,2,2],[1,2,3],[1,2,1]], dtype=int)
arr2 = np.array([[1,1,2],[2,2,3],[3,1,1]], dtype=int)
lookup = np.array(((0,10,15),(5,0,15),(5,10,0)), dtype=int)
result = np.zeros_like(arr1)
for r, c in product(*[range(x) for x in arr1.shape]):
a, b = arr1[r,c], arr2[r,c]
result[r,c] = lookup[a-1,b-1]
print(arr1, "\n")
print(arr2, "\n")
print(result)
这是输出:
[[1 2 2]
[1 2 3]
[1 2 1]]
[[1 1 2]
[2 2 3]
[3 1 1]]
[[ 0 5 0]
[10 0 0]
[15 5 0]]
关于python - 在 Python 中计算数组并赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49969215/