python - 在对每个数组进行更改时迭代数组列表

标签 python arrays python-3.x numpy for-loop

这是我之前一个问题的后续帖子:Referring to arrays in a for-loop .

我想概括那里提出的解决方案,以便能够完成更复杂的任务,例如将一列附加到包含某些计算结果的每个数组:

import numpy as np
list=[one, two, three]

for arr in list:
    arr=np.column_stack([arr,5*arr[:,2]-arr[:,1])])

所有三个数组具有相同的维度。

最佳答案

In [59]: one=np.arange(6).reshape(2,3)
In [60]: two=np.arange(6).reshape(2,3)

暂时忘掉循环,试着改变一个:

In [61]: arr = one
In [62]: arr=np.column_stack([arr,5*arr[:,2]-arr[:,1]])
In [63]: arr
Out[63]: 
array([[ 0,  1,  2,  9],
       [ 3,  4,  5, 21]])
In [65]: one
Out[65]: 
array([[0, 1, 2],
       [3, 4, 5]])

此操作已更改arr,但未更改一个。本来arr引用了与one相同的对象(ndarray),但是在新的赋值之后,它引用了一个新的数组。

for arr in alist:
    arr = ....

arr 被分配了 alist 的一个元素。但是随后在循环中它被分配了另一个东西,而不改变原始对象。在下一次迭代中,arr 被分配到列表中的下一个元素,依此类推。

您需要记住几件事。

  • Python 如何给变量赋值
  • Python 如何为迭代变量赋值
  • column_stack这样的函数

在你之前的问题中

In [69]: for arg in [one,two]:
    ...:     arg[:,1:] += 10
    ...:     
In [70]: one
Out[70]: 
array([[ 0, 11, 12],
       [ 3, 14, 15]])
In [71]: two
Out[71]: 
array([[ 0, 11, 12],
       [ 3, 14, 15]])

这是有效的,因为 arg[:,1:] += 10 正在修改当前分配给 arg 的数组。数组是可变的;元素值可以就地更改。

np.column_stack() 不会就地执行。它创建新数组。

关于用列表更改 onetwo 的唯一方法是一系列操作,例如:

In [72]: newlist=[np.column_stack([arr,5*arr[:,2]-arr[:,1]]) for arg in [one,two]]
In [73]: newlist
Out[73]: 
[array([[ 0,  1,  2,  9,  9],
        [ 3,  4,  5, 21, 21]]), array([[ 0,  1,  2,  9,  9],
        [ 3,  4,  5, 21, 21]])]
In [74]: one
Out[74]: 
array([[ 0, 11, 12],
       [ 3, 14, 15]])
In [75]: one, two = newlist
In [76]: one
Out[76]: 
array([[ 0,  1,  2,  9,  9],
       [ 3,  4,  5, 21, 21]])

In[72] 创建一个带有新数组的新列表。 In[75] 将这些新数组分配给变量 onetwo。这消除了他们以前的引用资料。实际上,我做了 one=[np.column_stack([one,5*one[:,2]-one[:,1]]),对于 two 也是如此.

关于python - 在对每个数组进行更改时迭代数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49059917/

相关文章:

java - 将两个一维数组转换为单个二维数组

python - numpy array 每个元素与矩阵相乘

python-3.x - 尝试安装 YouCompleteMe 时未找到 setup.py

python - 列之间的交叉点数量

python - 使用 cronjob 运行带有参数的 python 脚本会出现错误 :/bin/sh: password: command not found

python - 使用 numpy 查找最近的位置

javascript - 这个 for/in 循环究竟是如何工作的?

python - 如何实现神经网络剪枝?

Python 如何在导入包时模拟 ImportError

python for 循环无法识别列表中的 int