将matlab风格的索引转换为numpy

rub*_*nvb 2 matlab numpy

我想转换(更复杂的形式)下面的Matlab代码

a=zeros(9,9);
a(3+(1:3),6+(1:3))=1;
Run Code Online (Sandbox Code Playgroud)

去Numpy.我试过了

from numpy import zeros, r_

a=zeros((9,9))
a[3+r_[0:3],6+r_[0:3]] = 1
Run Code Online (Sandbox Code Playgroud)

但这只会在矩阵中加入3 1.如何在Python中以类似(简短)的形式编写matlab代码?

DSM*_*DSM 7

说实话,我可能只是这样做

>>> a = zeros((9,9))
>>> a[3:6, 6:9] = 1
Run Code Online (Sandbox Code Playgroud)

或非硬编码的等价物.如果你希望索引看起来更像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.]])
Run Code Online (Sandbox Code Playgroud)