首页 > 解决方案 > 在 numpy 中修改数组值时需要省略号 [...] 是什么?

问题描述

import numpy as np                
a = np.arange(0,60,5)            
a = a.reshape(3,4)                                    

for x in np.nditer(a, op_flags = ['readwrite']):          
   x[...] = 2*x              
print 'Modified array is:'              
print a

在上面的代码中,为什么我们不能简单地写成 x=2*x 而不是 x[...]=2*x 呢?

标签: pythonnumpynumpy-ndarray

解决方案


无论我们迭代的是哪种对象或该对象是如何实现的,几乎不可能对x = 2*x那个对象做任何有用的事情。x = 2*x是对变量的赋值x;即使x变量的先前内容是通过迭代某个对象获得的,新的赋值x也不会影响我们正在迭代的对象。

在这种特定情况下,使用 迭代 NumPy 数组np.nditer(a, op_flags = ['readwrite']),循环的每次迭代都设置x为一个零维数组,该数组是 的单元格的可写视图ax[...] = 2*x写入零维数组的内容,而不是重新绑定x变量。由于数组是 的单元格的视图a,因此该赋值写入 的相应单元格a

l = []这与l[:] = []普通列表之间的区别非常相似,wherel[:] = []将清除现有列表并将l = []列表替换为新的空列表而不修改原始列表。但是,列表不支持视图或零维列表。


推荐阅读