2014-10-22 2 views
4

저는 Numpy를 처음 사용하며 행렬의 일부를 대체하려고합니다. 예를 들어, numpy로 생성 된 두 개의 행렬 A, B가 있습니다.행렬의 하위 부분을 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., 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.]]) 

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]]) 

및/또는 다음

나는 다음과 같이 시도했지만 작동하지 않았다. 나는 :(지금

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

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. ]]) 
관련 문제