【发布时间】:2021-04-03 16:25:12
【问题描述】:
给定一个像这样的自引用分配:
x = np.array(range(5))
y = x[:-1]
print(x, y)
y[0] = 9
print(x, y)
x[1:] = y
print(x, y)
我最终得到以下输出:
[0 1 2 3 4] [0 1 2 3]
[9 1 2 3 4] [9 1 2 3]
[9 9 1 2 3] [9 9 1 2]
有人可以解释一下 numpy 在将其值分配给 x 之前在后台做什么以避免覆盖 y 吗?例如,如果我们将赋值 x[1:] = y 替换为 for 循环,则输出的最后一行是不同的:
x = np.array(range(5))
y = x[:-1]
print(x, y)
y[0] = 9
print(x, y)
for idx in range(1, len(x)):
x[idx] = y[idx-1]
print(x,y)
[0 1 2 3 4] [0 1 2 3]
[9 1 2 3 4] [9 1 2 3]
[9 9 9 9 9] [9 9 9 9]
一般而言,我可以在更改内存映射 ndarray 的宽度时依赖观察到的行为吗?或者如果 numpy 在分配之前创建视图的副本是没有意义的?
【问题讨论】:
-
Numpy 操作被缓冲,是的
标签: python numpy numpy-ndarray array-broadcasting