在Python中计算数组并赋值
我有两个多维数组,我想为匹配值和非匹配值求值和赋值在Python中计算数组并赋值,python,arrays,classification,Python,Arrays,Classification,我有两个多维数组,我想为匹配值和非匹配值求值和赋值 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
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
总体目标是检测变化。有关此方法的简要说明,请访问您可以在列表中执行此操作: 使用条件表达式生成值 首先放置if,else语句,然后遍历以替换值 我创建了一个列表,并从列表中随机抽取了一个数字
import random
array_1 = [[1, 2, 2], [1, 2, 3], [1, 2, 1]]
array_2 = [[1, 1, 2], [2, 2, 3], [3, 1, 1]]
lst = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
res = [[random.choice(lst) if i != j else 0 for i, j in zip(a, b)]
for a, b in zip(array_1, array_2)]
for i in res:
print(i)
返回:
[0, 25, 0]
[50, 0, 0]
[35, 45, 0]
第一:我不熟悉你在文章中展示的数组格式。我从未见过在Python中仅使用方括号实例化数组。这不是函数调用 第二:您的问题可能没有完全明确。但是:如果您向我们显示了输入数组中所有可能的值,那么只有1、2和3是可能的。在这种情况下,只有来自数组_1和数组_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]]
是的。。。你说得对。我把打开的支架放错地方了。共有9种可能性,其中三种为0(无变化),其他根据变化类型分配。谢谢你的帮助!事后看来,我提出了一个小小的改进。如果您愿意在
arr1
和arr2
中从零开始而不是从一开始编码您的条件,那么查找就更简单:只需使用result[r,c]=查找[a,b]
。我还想知道Numpy奇特的索引是否能发挥作用,消除了zero_like()
和循环的需要。这可以完成工作,但想法是打印一个3x3数组。我不确定,所以两种方法都做了。尽管这是相同的lol。我已经更新了一个3x3矩阵的答案。。