2

我想转换(更复杂的形式)以下 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 代码?

4

1 回答 1

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.]])
于 2013-02-18T16:05:37.487 回答