【发布时间】:2019-12-15 14:42:07
【问题描述】:
我想在一个循环中更新(在每个数组前添加额外的元素)许多 numpy 数组,而不必为每个数组重复代码。
我尝试创建所有数组的列表并遍历该列表中的项目并更新每个项目,但这不会改变原始数组。
import numpy as np
arr01 = [1,2,3]
arr02 = [4,5,6]
arr99 = [7,8,9]
print('initial arr01', arr01)
arraylist = [arr01, arr02, arr99]
for array in arraylist:
array = np.concatenate((np.zeros(3, dtype=int), array))
print('array being modified inside the loop', array)
print('final arr01', arr01)
在示例代码中,我希望 arr01、arr02、arr03 都用前置零进行修改。
【问题讨论】:
-
np.concatenate返回一个新数组,array只是重新分配给该数组。内容(即arraylist中的 ndarrays)没有被修改。你总是可以通过索引来做到这一点——将for循环更改为for i in range(len(arraylist)):并将array更改为arraylist[i]。 -
@PyNoob 这行不通,因为要查看结果,他再次使用了
arr01变量,该变量不受任何arraylist[i]更改的影响 -
@Saritus 没错,但可以通过打印
arraylist[0]来避免这种情况。如果需要ndarray方法,我不知道该怎么做。 -
@PyNoob 迭代后可能类似于
arr01, arr02, arr99 = arraylist,因此arraylist内部的所有更改都被复制回原始变量 -
您不能在 Python 循环中执行此操作。您必须为每个命名数组使用
arr02 = np.concatenate((np.zeros(3, int), arr02))。一旦你沿着 'arr01, arr02,...' 路线开始,你就会被它困住。
标签: python arrays loops numpy updates