我有以下代码,该代码构造了两个矩阵a
(零的3 * 2矩阵)和b
。我想根据存储在索引0
中的索引位置,用a
替换矩阵1
中的b
。我想要没有for
循环。
import numpy as np
a = np.zeros((3, 2))
b = np.array([0, 1, 0])
输出应为
c = [[1, 0],
[0, 1],
[1, 0]]
答案 0 :(得分:3)
Numpy花式索引在这里是您的朋友。为了使b
作为列索引,您需要一个与b
相等大小的数组,该数组将告诉您每个索引适用的行:
a[np.arange(b.size), b] = 1
这会就地修改a
。如果那不是您想要的,请首先进行复制:
c = a.copy()
c[np.arange(b.size), b] = 1