gpt4 book ai didi

python - 索引二维矩阵的 NumPy 数组

转载 作者:太空狗 更新时间:2023-10-30 01:09:02 24 4
gpt4 key购买 nike

我在处理相同的大数据时遇到了一个小问题。但现在,让我们假设我有一个用零填充的 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])]

关于python - 索引二维矩阵的 NumPy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17337680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com