Array formated as arr = [(1,1),(1,1)...(35,1),(35,1)] 可能会造成混淆。它看起来像是 tuples 的 list。如果是这样的话,您需要使用列表推导来创建一个新列表:
arr1 = [(i,j, fun(i,j)) for i,j in arr]
例如
In [359]: arr=[(1,1),(1,2),(35,1),(35,2)]
In [360]: [(i[0],i[1], sum(i)) for i in arr]
Out[360]: [(1, 1, 2), (1, 2, 3), (35, 1, 36), (35, 2, 37)]
但你在评论中说arr 是一个 numpy 数组。
In [361]: Arr=np.array(arr)
In [362]: Arr
Out[362]:
array([[ 1, 1],
[ 1, 2],
[35, 1],
[35, 2]])
相同的数字,但显示为列表列表。显示为元组列表的数组是结构化数组,具有不同的dtype。
该函数是否可以获取整个数组,还是必须将值 2 乘 2 提供?
np.sum 获取整个数组,并可以返回二维结果:
In [366]: np.sum(Arr, axis=1, keepdims=True)
Out[366]:
array([[ 2],
[ 3],
[36],
[37]])
它可以很容易地连接到Arr,从而提供一个新数组:
In [370]: np.concatenate([Arr,np.sum(Arr, axis=1, keepdims=True)],axis=1)
Out[370]:
array([[ 1, 1, 2],
[ 1, 2, 3],
[35, 1, 36],
[35, 2, 37]])
另一方面,Python sum 只接受数字。 Arr 可以像列表一样用于推导式:
In [371]: [sum(i) for i in Arr]
Out[371]: [2, 3, 36, 37]
要将其连接到原始数据上,我需要将其转换为二维“垂直”数组(如 Out[366] 所示)
In [376]: np.concatenate([Arr,np.array([sum(i) for i in Arr])[:,None]],axis=1)
Out[376]:
array([[ 1, 1, 2],
[ 1, 2, 3],
[35, 1, 36],
[35, 2, 37]])
append、vstack、hstack 都是 concatenate 的变体。您还可以构造一个(4,3) 数组,并插入Arr 的值和新的计算。