python - 如何使用嵌套索引为数组元素分配新值?

标签 python numpy

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/

相关文章:

python - 列表的 Pandas 列分隔列

python - 如何在需要唯一性和非唯一性检查的Python循环中向量化这个循环?

Python - 无法使用 selenium chromewebdriver 下载文件 - 'Failed - Download error'

python - cgi不执行HTML

python - 如何使用numpy调整图像数据的大小?

python - 将 0 插入二维数组

python - 如何将具有不同列长度的数据表转换为python中的箱线图

python - 使用字典中的值计算对数似然比

python - 使用python将excel转换为 Feather 格式

python - 检查数字是否步进的函数返回 false