2013-02-18 100 views
2

我想轉換(更復雜的形式)的follwing Matlab代碼轉換MATLAB風格索引,以numpy的

a=zeros(9,9); 
a(3+(1:3),6+(1:3))=1; 

到NumPy的。我試過

from numpy import zeros, r_ 

a=zeros((9,9)) 
a[3+r_[0:3],6+r_[0:3]] = 1 

但是這隻能把3 1放在矩陣中。我如何在Python中以類似(簡短)的形式編寫matlab代碼?

+0

在你沒有看到它的情況:http://www.scipy.org/NumPy_for_Matlab_Users。標題爲「線性代數等價」的部分可能特別有用。 – mtrw 2013-02-18 17:07:56

回答

7

說實話,我很可能只是做

>>> a = zeros((9,9)) 
>>> a[3:6, 6:9] = 1 

或者非硬編碼等效。如果你想索引看起來更像Matlab的在這裏,雖然,那麼你可以使用ix_

>>> a = zeros((9,9)) 
>>> a[ix_(3+r_[0:3], 6+r_[0:3])] = 1 
>>> a 
array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 1., 1., 1.], 
     [ 0., 0., 0., 0., 0., 0., 1., 1., 1.], 
     [ 0., 0., 0., 0., 0., 0., 1., 1., 1.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0.]]) 
+0

問題是,硬編碼數字沒有硬編碼,我將代碼簡化爲StackOverflow的核心形式。 「非硬編碼等值」是什麼意思? – rubenvb 2013-02-18 16:43:07

+0

我的意思是用「y + dy」等替換「3」與「y」和「6」。 – DSM 2013-02-18 16:46:23