2014-10-22 193 views
4

我是Numpy的新手,想要替换矩阵的一部分。例如,我有两个矩阵,A,B由numpy生成用numpy中的另一个小矩阵替换矩阵的子部分

In [333]: A = ones((5,5)) 

In [334]: A 
Out[334]: 
array([[ 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1.]]) 

In [335]: B 
Out[335]: 
array([[ 0.1, 0.2], 
     [ 0.3, 0.4]]) 

最后,我想使A成为下面的矩阵。

In [336]: A 
Out[336]: 
array([[ 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 0.1, 0.2], 
     [ 1., 1., 1., 0.3, 0.4]]) 

和/或以下

In [336]: A 
Out[336]: 
array([[ 1., 1., 1., 0.1, 0.2], 
     [ 1., 1., 1., 0.3, 0.4], 
     [ 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1.]]) 

我试图像下面,但没有奏效。我没有任何想法,现在:(

A[[0,1],:][:,[3,4]] = B 

,甚至我试着像

A[[0,1],:][:,[3,4]] = 1 

检查四个单元是否被更改或不。你有什么想法?

回答

3

这里是你如何能做到这:

>>> A[3:5, 3:5] = B 
>>> A 
array([[ 1. , 1. , 1. , 1. , 1. ], 
     [ 1. , 1. , 1. , 1. , 1. ], 
     [ 1. , 1. , 1. , 1. , 1. ], 
     [ 1. , 1. , 1. , 0.1, 0.2], 
     [ 1. , 1. , 1. , 0.3, 0.4]]) 
+1

什么非连续的行/ COLS?也就是说,如果OP想要'A [[0,3],:] [:,[3,4]]'? – Tgsmith61591 2017-09-08 18:13:26

3

对于第一种:

In [13]: A[-B.shape[0]:, -B.shape[1]:] = B        

In [14]: A 
Out[14]: 
array([[ 1. , 1. , 1. , 1. , 1. ],         
     [ 1. , 1. , 1. , 1. , 1. ],         
     [ 1. , 1. , 1. , 1. , 1. ],         
     [ 1. , 1. , 1. , 0.1, 0.2],         
     [ 1. , 1. , 1. , 0.3, 0.4]]) 

对于第二:

In [15]: A = np.ones((5,5))            

In [16]: A[:B.shape[0], -B.shape[1]:] = B        

In [17]: A 
Out[17]: 
array([[ 1. , 1. , 1. , 0.1, 0.2],         
     [ 1. , 1. , 1. , 0.3, 0.4],         
     [ 1. , 1. , 1. , 1. , 1. ],         
     [ 1. , 1. , 1. , 1. , 1. ],         
     [ 1. , 1. , 1. , 1. , 1. ]])