import numpy as np
data = np.zeros((5,3))
In [44]: data
Out[44]:
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
In [45]: data[[0,1,2]] = 2
In [46]: data
Out[46]:
array([[ 2., 2., 2.],
[ 2., 2., 2.],
[ 2., 2., 2.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
In [47]: data[[0,1,2]][2]
Out[47]: array([ 2., 2., 2.])
In [48]: data[[0,1,2]][2] = 3
In [49]: data[[0,1,2]][2]
Out[49]: array([ 2., 2., 2.])
我原以为最后的结果是 [3., 3., 3.]。为什么使用双索引替换元素不起作用?有没有办法使用双索引更改数组的元素?
最佳答案
在
data[[0,1,2]][2] = 3
data[[0,1,2]]
是 data
的一部分的副本,而不是 view
。表达式正在修改该副本,而不是 data
本身。
In [298]: data=np.arange(15).reshape(5,3)
In [299]: data[[0,1,2]]
Out[299]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
In [300]: data[[0,1,2]][2]
Out[300]: array([6, 7, 8])
这个作业有效:
data[[0,1,2]] = 2
因为 'advanced-indexing' 就在 =
之前。在第一种情况下,它由另一层索引分隔。
关于python - 如何使用嵌套索引为数组元素分配新值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43666720/