了解映射到数组的行为

时间:2016-09-22 17:46:14

标签: python-3.x numpy

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]])

0 个答案:

没有答案