2014-10-22 148 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. ]])