2013-02-18 86 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