2015-09-04 40 views
1

我需要更改矩陣的編號方案。再說了,從列到行的Numpy開關編號

import numpy as np 
a = np.arange(6).reshape(3,2) 
array([[0, 1], 
     [2, 3], 
     [4, 5]]) 

我想切換到

b = np.array([[0,3],[1,4],[2,5]]) 
array([[0, 3], 
     [1, 4], 
     [2, 5]]) 

所以,基本上我Number矩陣通過行第一。我相信有一個很好的辦法做到這一點在numpy的

回答

5
>>> import numpy as np 
>>> np.arange(6).reshape(3,2, order = 'F') 
>>> array([[0, 3], 
    [1, 4], 
    [2, 5]]) 

從DOC:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html

使用順序= 'F' 來指定的Fortran傳統的代表性和秩序='C '(默認)使用傳統的C表示法。

+0

太好了。非常感謝!! – HansSnah

+0

您的最終數組不符合@HansSnah的預期結果或您創建的數組。 – wwii

+0

這只是一個複製粘貼錯誤。我得到'a':'array([[0,3], [1,4], [2,5]]) ' – hpaulj

2

要創建新的形狀相同數據的視圖,您可以使用a.T.reshape(3, 2, order='F')

In [35]: a = np.arange(6).reshape(3,2) 

In [36]: a 
Out[36]: 
array([[0, 1], 
     [2, 3], 
     [4, 5]]) 

In [37]: b = a.T.reshape(3, 2, order='F') 

In [38]: b 
Out[38]: 
array([[0, 3], 
     [1, 4], 
     [2, 5]]) 

驗證ab都享有相同的數據,通過改變a和檢查b

In [39]: a[1, 0] = 99 

In [40]: a 
Out[40]: 
array([[ 0, 1], 
     [99, 3], 
     [ 4, 5]]) 

In [41]: b 
Out[41]: 
array([[ 0, 3], 
     [ 1, 4], 
     [99, 5]])