Pab*_*era 5 python indexing numpy
有时仅为分配一个索引的数组很有用.在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
Run Code Online (Sandbox Code Playgroud)
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.]])
Run Code Online (Sandbox Code Playgroud)
请注意,在numpy中,切片语法是[start:stop_exclusive:step],而不是Matlab(start:step:stop_inclusive).
基于sebergs注释,指出Matlab将矩阵存储在列major中可能很重要,而numpy数组默认为row major.
>>> 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.]])
Run Code Online (Sandbox Code Playgroud)
要在展平的数组上获得类似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.]])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1538 次 |
| 最近记录: |