为什么在这里多次分配会产生意外的结果?

原子

码:

import numpy as np

def f(a):
    return np.array([0, 1])

N_x, N_y = 4, 3

U = V = np.zeros((N_x, N_y))

for n_y in range(N_y):
    for n_x in range(N_x):
        U[n_x, n_y], V[n_x, n_y] = f(0)

print(U, V)

这样会产生意外的输出:

[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]] [[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]

但是如果我用

U = np.zeros((N_x, N_y))
V = np.zeros((N_x, N_y))

代替U = V = np.zeros((N_x, N_y)),我得到以下预期结果。

[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]] [[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]

问题:这里出了什么问题?

伊利亚·诺沃塞洛夫(Ilia Novoselov)

通过多次分配,您只能将一个对象分配给U和V变量,因此,有效的做法是:

for n_y in range(N_y):
    for n_x in range(N_x):
        U[n_x, n_y], U[n_x, n_y] = f(0)

print(U, U)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章