map
何时修改数组?我知道迭代数组的首选方法是使用列表解析,但是我正在为ipyparallel准备一个算法,它显然使用了map
函数。我的数组的每一行都是一组模型输入,我想最终并行使用map
来运行每一行的模型。我使用的是Python 3.4.5和Numpy 1.11.1。我需要这些版本才能与其他软件包兼容。
这个简单的例子创建了一个列表,并保持输入数组的完整性,正如我所料。
grid = np.arange(25).reshape(5,5)
grid
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
def f(g):
return g + 1
n = list(map(f, grid))
grid
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
但是当函数修改输入行的切片时,数组就会被修改。任何人都可以解释这种行为吗?
def f(g):
g[:2] = g[:2] + 1
return g
n = list(map(f, grid))
grid
array([[ 1, 2, 2, 3, 4],
[ 6, 7, 7, 8, 9],
[11, 12, 12, 13, 14],
[16, 17, 17, 18, 19],
[21, 22, 22, 23, 24]])