Python 如何添加矩阵的每两行?
假设我有一个矩阵Python 如何添加矩阵的每两行?,python,numpy,add,Python,Numpy,Add,假设我有一个矩阵 a = np.array([[[ 1, 2], [ 3, 4]], [[ 5, 6], [ 7, 8]], [[ 9, 10], [11, 12]], [[13, 14], [15, 16]]]) 形状是(4,2,2)。我想把前两个和后两个矩阵相加。最终输出大小应具有形状(2,2,2),并且输出应为 output = np.array([[[ 6, 8], [10, 12]],
a = np.array([[[ 1, 2], [ 3, 4]],
[[ 5, 6], [ 7, 8]],
[[ 9, 10], [11, 12]],
[[13, 14], [15, 16]]])
形状是(4,2,2)
。我想把前两个和后两个矩阵相加。最终输出大小应具有形状(2,2,2)
,并且输出应为
output = np.array([[[ 6, 8], [10, 12]],
[[22, 24], [26, 28]]])
您可以在下面看到我的尝试:
import numpy as np
a = np.array([[[ 1, 2], [ 3, 4]],
[[ 5, 6], [ 7, 8]],
[[ 9, 10], [11, 12]],
[[13, 14], [15, 16]]])
output = np.add(a[:2], a[2:])
使用“重塑”将第一个尺寸拆分为两个,沿第二个轴求和:
a.reshape(2, 2, *a.shape[1:]).sum(axis=1)
您当前的方法相当于a.reformate(2,2,*a.shape[1:]).sum(axis=0)
。正确的方法是对整个数组的每一行进行切片,而不是对整个数组的每一块进行切片:
a[::2] + a[1::2]
后一种方法不能很好地推广。如果你必须加起来,比如说每七个街区,你会得到
a[::7] + a[1::7] + a[2::7] + a[3::7] + ... + a[6::7]
但是,前一种方法相当灵活:
a.reshape(-1, 7, *a.shape[1:]).sum(axis=1)
请修复变量名。一行称它为
Input
,这不是很像python,另一行称它为a
。选择一个。另外,np.add
在这个上下文中只是+
谢谢,如果我有一个矩阵a=np.random.randint(5,size=(140,64,1,60,60)),并且想要添加前7个矩阵和第二个7个矩阵,依此类推。。。最终输出大小应具有形状(20,64,1,60,60)。@Aras。请努力理解我在这里写的内容以及它是如何工作的。试着自己做切片。如果这不起作用,问另一个问题。我想这应该是正确的:b=a.reforme(20,7,*a.shape[1:]).sum(axis=1)@Aras。我想你已经明白了要点:)我很高兴你花时间来解决它。@Aras。我已经更新了答案