2014-02-27 2 views
1

다른 열에서 같은 섹션 칼럼의 특정 섹션을 전환 : 나는 현재에 의해이 일을하고NumPy와 내가 배열 A를 가지고

>>> B 
    array([[ 1., 0., 0.], 
      [ 2., 0., 0.], 
      [ 3., 0., 0.], 
      [ 0., 1., 0.], 
      [ 0., 3., 0.], 
      [ 0., 0., 0.], 
      [ 0., 0., 2.], 
      [ 0., 0., 0.], 
      [ 0., 0., 0.]]) 

: I가 싶어

>>> A=np.array([[1,2,3], 
       [1,3,0], 
       [2,0,0]]) 

>>> rows,cols=A.shape 

>>> C=np.zeros([rows*cols,cols]) 

>>> C[:,0]=np.ravel(A) 

>>> for i in range(1,C.shape[1]): 
...  C[i*rows:(i+1)*rows,[i,0]]=C[i*rows:(i+1)*rows,[0,i]] 

루프없이이 변환을 수행 할 수있는 방법이 있습니까?

답변

1
>>> rows, cols = A.shape 
>>> row_idx = np.arange(rows*cols) 
>>> col_idx = np.repeat(np.arange(rows), cols) 
>>> B = np.zeros((rows*cols, rows), dtype=A.dtype) 
>>> B[row_idx, col_idx] = A.ravel() 
>>> B 
array([[1, 0, 0], 
     [2, 0, 0], 
     [3, 0, 0], 
     [0, 1, 0], 
     [0, 3, 0], 
     [0, 0, 0], 
     [0, 0, 2], 
     [0, 0, 0], 
     [0, 0, 0]]) 
0
rows = A.shape[0] 
C = np.zeros((A.size, rows)) 
ind = np.arange(0, C.size, rows).reshape(A.shape) + np.arange(rows)[:,None] 
C.flat[ind] = A