2

有没有办法逐列修改循环内的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

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

4

1 回答 1

4

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

mnX += cnA

如果您坚持迭代,我认为最简单的方法是迭代转置数组:

for col in mnX.T:
    col += cnA[:, 0].T
于 2013-07-11T13:54:55.093 回答