在循环内逐列修改numpy数组

时间:2013-07-11 12:04:58

标签: python arrays numpy in-place

有没有办法按列修改循环列中的numpy数组?

我希望这可以通过以下代码来完成:

import numpy as n

cnA=n.array([[10,20]]).T
mnX=n.array([[1,2],[3,4]])
for cnX in n.nditer(mnX.T, <some params>):
    cnX = cnX+cnA

我应该使用哪些参数来获取mnX=[[10,23],[12,24]]

我知道可以使用以下代码解决问题:

cnA=n.array([10,20])
mnX=n.array([[1,2],[3,4]])
for col in range(mnX.shape[1]):
    mnX[:,col] = mnX[:,col]+cnA

Hovewer,在python中我们遍历修改过的对象,而不是索引,所以问题是 - 是否可以直接遍历列(需要就地修改)?

1 个答案:

答案 0 :(得分:4)

您知道,我们中的一些人,在Python中,在有用时会迭代索引而不是修改对象。虽然在NumPy中,作为一般规则,除非没有其他出路,否则我们不会明确迭代:对于您的问题,最简单的方法是跳过迭代并依赖于广播:

mnX += cnA

如果你坚持迭代,我认为最简单的就是遍历转置数组:

for col in mnX.T:
    col += cnA[:, 0].T