numpy无法为列的一部分赋值

时间:2017-06-09 18:51:44

标签: python numpy

当我想将一个向量分配给矩阵中的一部分列时,它失败了。这是一个小例子:

>>> a = np.random.randn(3,4)
>>> a
array([[ 0.12263942, -0.21972043, -0.97263544,  0.10609172],
       [ 0.27012565,  1.0006549 ,  0.80596588, -0.2954019 ],
       [-0.28402912, -2.62405207, -0.52560166,  0.07325703]])
>>> x
array([-0.33707461,  0.66196137])
>>> a[np.array([0,2])][:,2] = x
>>> a[np.array([0,2])][:,2]
array([-0.97263544, -0.52560166])

但这有效:

>>> a = np.random.randn(3,4)
>>> a
array([[ 0.45379867,  0.38782073, -0.01432557, -1.03457707],
       [ 1.27650459,  0.4480737 , -1.31625142,  2.00037792],
       [ 0.77420762,  1.20131941, -0.98937721, -0.04921255]])
>>> x2 = np.random.randn(3)
>>> x2
array([-1.82217731, -0.72454628, -0.41954297])
>>> a[:,2] = x2
>>> a[:,2]
array([-1.82217731, -0.72454628, -0.41954297])

为什么第一个例子不起作用?我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

在数组上使用[]时,它将返回您正在引用的数组切片的副本,或者准备分配给该特定切片。

因此当您执行a[slc1][slc2] = stuff时,a[slc1]现在是a的副本,将其称为a_,以便a[slc1][slc2]a_[slc2]相同}}

然后您分配给a[slc1][slc2] = stuffa_[slc2] = stuff相同的副本。哪个没问题,但是你已经分配了一个只是临时创建的变量。

而是在同一作业中进行作业

a[slc1, slc2] = stuff

或者在你的情况下

a[[0, 2], 2] = x

使用(a[[0, 2], 2] == x).all()检查将返回True