Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.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_Numpy_Add - Fatal编程技术网

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。我已经更新了答案