Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 3.x python numpy堆栈矩阵并添加特定的角/列条目_Python 3.x_Numpy_Matrix - Fatal编程技术网

Python 3.x python numpy堆栈矩阵并添加特定的角/列条目

Python 3.x python numpy堆栈矩阵并添加特定的角/列条目,python-3.x,numpy,matrix,Python 3.x,Numpy,Matrix,假设我们有两个矩阵A和B,大小为2乘2。是否有一个命令可以将它们水平堆叠,并将a[:,1]添加到B[:,0],从而生成的矩阵C是2乘3,其中C[:,0]=a[:,0],C[:,1]=a[:,1]+B[:,0],C[:,2]=B[:,1]。更进一步,将它们堆叠在对角线上,以便C[0:2,0:2]=A,C[1:2,1:2]=B,C[1,1]=A[1,1]+B[0,0]。在这种情况下,C是3乘3。硬编码这个例程并不难,但我只是好奇,因为如果我的记忆力好的话,MATLAB也有类似的功能。一个简单的方法是

假设我们有两个矩阵A和B,大小为2乘2。是否有一个命令可以将它们水平堆叠,并将a[:,1]添加到B[:,0],从而生成的矩阵C是2乘3,其中
C[:,0]=a[:,0],C[:,1]=a[:,1]+B[:,0],C[:,2]=B[:,1]
。更进一步,将它们堆叠在对角线上,以便
C[0:2,0:2]=A,C[1:2,1:2]=B,C[1,1]=A[1,1]+B[0,0]
。在这种情况下,C是3乘3。硬编码这个例程并不难,但我只是好奇,因为如果我的记忆力好的话,MATLAB也有类似的功能。

一个简单的方法是将两个数组复制或添加到一个目标:

In [882]: A=np.arange(4).reshape(2,2)
In [883]: C=np.zeros((2,3),int)
In [884]: C[:,:-1]=A
In [885]: C[:,1:]+=A   # or B
In [886]: C
Out[886]: 
array([[0, 1, 1],
       [2, 5, 3]])
另一种方法是在末尾填充
A
,在开头填充
B
,然后求和;虽然有一个方便的
pad
功能,但不会更快

对角线呢

In [887]: C=np.zeros((3,3),int)
In [888]: C[:-1,:-1]=A
In [889]: C[1:,1:]+=A
In [890]: C
Out[890]: 
array([[0, 1, 0],
       [2, 3, 1],
       [0, 2, 3]])
同样,这两个阵列可以
pad
并添加

我不知道有什么专门的功能可以做到这一点;即使有,它也可能做同样的事情。这不是一个足够常见的操作来证明编译版本的合理性

我通过添加重叠单元矩阵建立了有限元稀疏矩阵。MATLAB和scipy的稀疏格式都有助于实现这一点(重复坐标相加)

============

In [896]: np.pad(A,[[0,0],[0,1]],mode='constant')+np.pad(A,[[0,0],[1,0]],mode='
     ...: constant')
Out[896]: 
array([[0, 1, 1],
       [2, 5, 3]])
In [897]: np.pad(A,[[0,1],[0,1]],mode='constant')+np.pad(A,[[1,0],[1,0]],mode='
     ...: constant')
Out[897]: 
array([[0, 1, 0],
       [2, 3, 1],
       [0, 2, 3]])
做这个的特殊MATLAB代码是什么

在八度音阶中,我发现:

prepad(A,3,0,axis=2)+postpad(A,3,0,axis=2)