如何用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非常感谢你,这对我来说非常有用