考虑两个数组 A 和 B,维度均为 NxN。 我希望生成一个新数组 NxN,这样每个新元素都是类型 (A_ij,B_ij) 的元组(或列表,并不重要)。
我可以通过逐个元素运行来做到这一点,例如:
def recombine(A,B):
NewArray=[]
for i in range(len(A)):
NewArray.append([])
for j in range(len(B)):
NewArray[i].append(A[i][j],B[i][j])
return NewArray
这是一个非常消耗内存的算法。
我想知道是否有更有效的方法(利用 numpy 数组来做到这一点)。
为了澄清这一点,让我们考虑以下示例(为了简单起见,我考虑使用简单列表而不是 np 数组):
A=[[1,2],[3,4]]
B=[[10,20],[30,40]]
#I want an output in the form:
[[(1,10),(2,20)],[(3,30),(4,40)]]
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[10, 20], [30, 40]])
def combine(A, B):
result_array = np.dstack((A, B))
return [[tuple(pair) for pair in row] for row in result_array]
print(combine(A, B))
您可以使用嵌套
zip
。 zip
从一组可迭代对象中生成元组,其中元组中的每一项依次是每个可迭代对象的下一个值。首先,您压缩 A
和 B
,这会在 A
和 B
中生成子列表,然后再进行第二次压缩以翻转它们。
>>> A=[[1,2],[3,4]]
>>> B=[[10,20],[30,40]]
>>> [list(zip(*zipped)) for zipped in zip(A,B)]
[[(1, 10), (2, 20)], [(3, 30), (4, 40)]]