我有两个不同大小的数组,我想在for循环中对它们执行逻辑函数。例如,如果我有:
array1 = [6,7,8]
array2 = [1,2,3,4,5]
我想把array1中的每个元素减去array2中的每个元素,得到如下结果
[6-1,6-2,6-3,6-4,6-5],[7-1,7-2,7-3,7-4,7-5],[8-1,8-2,8-3,8-4,8-5]
它从array1的每个元素中减去array2中的每个元素
所以我试着做一个for循环,如下所示:
for i in range(len(array1)):
ar = array1[i]-array2
而且还
for i in range(len(array1)):
for j in range(len(array2)):
ar = array1[i]-array2[j]
但是这两种方法似乎都不起作用。
第一种方法似乎是返回一个具有正确形状的数组,但肯定不是正确的值。
我希望它在单独的数组中返回,因为在现实中,我有一个非常大的样本大小。
发布于 2019-03-23 03:12:34
我们可以使用itertools.product
来解决这个问题
from itertools import product
from operator import sub
final = []
for item in array1:
prods = product([item], array2)
subs = [sub(*p) for p in prods]
final.append(subs)
print(final)
# [[5, 4, 3, 2, 1], [6, 5, 4, 3, 2], [7, 6, 5, 4, 3]]
它的工作原理是product以元组的形式返回两个数组的笛卡尔乘积,因此:
(6, 1), (6, 2), etc....
然后,我们只需使用列表理解将sub
函数应用于每个元组。
发布于 2019-03-23 03:19:27
下面的解决方案应该使用列表理解:
result = []
for value1 in array1:
result.append([value1 - value2 for value2 in array2])
你甚至可以在一行代码中使用两个for循环来理解列表:
result = [[value1 - value2 for value2 in array2] for value1 in array1]
发布于 2019-03-23 03:14:21
循环解决方案:
array1 = [6, 7, 8]
array2 = [1, 2, 3, 4, 5]
arr = []
for i in array1:
tmp = []
for j in array2:
tmp.append(i - j)
arr.append(tmp)
print(arr)
输出:
[5,4,3,2,1,6,5,4,3,2,7,6,5,4,3]
https://stackoverflow.com/questions/55306357
复制相似问题