如何用python中另一个矩阵的索引填充矩阵元素

如何用python中另一个矩阵的索引填充矩阵元素,python,numpy,matrix,indexing,Python,Numpy,Matrix,Indexing,我有下面的代码,它构造了两个矩阵a(3*2个零矩阵)和b。我想将矩阵a中的0s替换为1s,具体取决于索引b中存储的索引位置。我想在不使用for循环的情况下完成它 import numpy as np a = np.zeros((3, 2)) b = np.array([0, 1, 0]) 输出应该是 c = [[1, 0], [0, 1], [1, 0]] Numpy是你的朋友。要使b用作列索引,您需要一个与b大小相等的数组,该数组将告诉您每个索引适用的行: a[np.

我有下面的代码,它构造了两个矩阵
a
(3*2个零矩阵)和
b
。我想将矩阵
a
中的
0
s替换为
1
s,具体取决于索引
b
中存储的索引位置。我想在不使用
for
循环的情况下完成它

import numpy as np

a = np.zeros((3, 2))
b = np.array([0, 1, 0])
输出应该是

c = [[1, 0],
     [0, 1],
     [1, 0]]

Numpy是你的朋友。要使
b
用作列索引,您需要一个与
b
大小相等的数组,该数组将告诉您每个索引适用的行:

a[np.arange(b.size), b] = 1
这将在适当的位置修改
a
。如果这不是您想要的,请先复制一份:

c = a.copy()
c[np.arange(b.size), b] = 1

你能把
c
显示为一个合适的二维数组吗?你是说
b
的每个元素对应于
a
的一行,并告诉你要设置哪个索引?你也可以使用
a[range(len(b)),b]=1
。也许您可以将此添加为alternative@Bazingaa. 如果我没弄错的话,那是一个错误的内存保存设备。在内部,索引将扩展为numpy数组,而不管您如何传入它。无论如何,由于numpy已经用于创建矩阵,因此它排除了导入过度的问题。所以是的,
np.arange
makesense@Bazingaa. 确切地“如果你已经在使用图书馆了,那就没有必要犹豫了。”MadPhysician非常感谢你,这对我来说非常有用