我想转换(更复杂的形式)下面的Matlab代码
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 :(得分: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.]])