Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中计算数组并赋值_Python_Arrays_Classification - Fatal编程技术网

在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矩阵的答案。。