有时只用一个索引分配数组很有用。在 Matlab 中,这很简单:
M = zeros(4);
M(1:5:end) = 1
M =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
有没有办法在 Numpy 中做到这一点?首先,我想展平数组,但该操作不会保留引用,因为它会生成一个副本。我尝试使用 ix_,但无法使用相对简单的语法来完成。
最佳答案
你可以试试 numpy.ndarray.flat ,它表示可用于读取和写入数组的迭代器。
>>> M = zeros((4,4))
>>> M.flat[::5] = 1
>>> print(M)
array([[ 1., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 0., 1.]])
请注意,在 numpy 中,切片语法是 [start:stop_exclusive:step],而不是 Matlab 的 (start:step:stop_inclusive)。
根据 sebergs 评论,指出 Matlab 以列为主存储矩阵可能很重要,而 numpy 数组默认情况下以行为主。
>>> M = zeros((4,4))
>>> M.flat[:4] = 1
>>> print(M)
array([[ 1., 1., 1., 1.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
要在展平数组上获得类似 Matlab 的索引,您需要展平转置数组:
>>> M = zeros((4,4))
>>> M.T.flat[:4] = 1
>>> print(M)
array([[ 1., 0., 0., 0.],
[ 1., 0., 0., 0.],
[ 1., 0., 0., 0.],
[ 1., 0., 0., 0.]])
关于python - Numpy:作为 Matlab 的赋值和索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20688881/