[英]NumPy array indexing a 2D matrix
在处理相同的大数据时,我遇到了一个小问题。 但是现在,让我们假设我有一个用零填充的NumPy数组
>>> x = np.zeros((3,3))
>>> x
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
现在,我想用特定值更改其中一些零。 我已经给出了要更改的单元格的索引。
>>> y = np.array([[0,0],[1,1],[2,2]])
>>> y
array([[0, 0],
[1, 1],
[2, 2]])
我有一个具有所需(现在是随机的)数字的数组,如下
>>> z = np.array(np.random.rand(3))
>>> z
array([ 0.04988558, 0.87512891, 0.4288157 ])
所以现在我想我可以做到以下几点:
>>> x[y] = z
但是比起这样填充整个数组
>>> x
array([[ 0.04988558, 0.87512891, 0.4288157 ],
[ 0.04988558, 0.87512891, 0.4288157 ],
[ 0.04988558, 0.87512891, 0.4288157 ]])
但是我希望得到
>>> x
array([[ 0.04988558, 0, 0 ],
[ 0, 0.87512891, 0 ],
[ 0, 0, 0.4288157 ]])
编辑
现在,我使用了对角线索引,但是在这种情况下,我的索引不仅仅是对角线。 我希望以下作品:
>>> y = np.array([[0,1],[1,2],[2,0]])
>>> x[y] = z
>>> x
>>> x
array([[ 0, 0.04988558, 0 ],
[ 0, 0, 0.87512891 ],
0.4288157, 0, 0 ]])
但这就像上面那样填充整个数组
数组索引在多维数组上的工作方式略有不同
如果有矢量,则可以使用来访问前三个元素
x[np.array([0,1,2])]
但是在矩阵上使用它时,它将返回前几行。 一见钟情,使用
x[np.array([0,0],[1,1],[2,2]])]
听起来很合理。 但是,NumPy数组索引的工作方式不同:它仍然以一维方式处理所有这些索引,但是以与索引向量相同的形状从向量返回值。
要正确访问2D矩阵,您必须将两个分量都分成两个单独的数组:
x[np.array([0,1,2]), np.array([0,1,2])]
这将获取矩阵主对角线上的所有元素。 也可以使用此方法进行分配:
x[np.array([0,1,2]), np.array([0,1,2])] = 1
因此,要访问您在编辑中提到的元素,必须执行以下操作:
x[np.array([0,1,2]), np.array([1,2,0])]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.