我有以下numpy数组matrix
matrix = np.zeros((3,5), dtype = int)
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
假设我也有这个numpy数组indices
问题:如何将1
分配给matrix
中的元素,它们的索引由indices
数组指定。需要矢量化实现。在
为了更清晰,输出应该如下所示:
array([[0, 1, 0, 1, 0], #[1,3] elements are changed
[0, 0, 1, 0, 1], #[2,4] elements are changed
[1, 0, 0, 0, 1]]) #[0,4] elements are changed
这里有一种使用^{} -
说明
我们使用
^{pr2}$np.arange(matrix.shape[0])
-列索引已指定为
indices
-让我们制作一个行和列索引的形状的示意图,}-
idx
和{为了使用行和列索引索引到输入数组},如下所示-
matrix
,我们需要使它们相互广播。一种方法是在idx
中引入一个新的轴,通过将元素推入第一个轴,并允许使用idx[:,None]
作为最后一个轴,从而使其成为{在内部,
idx
将被广播,如下-因此,来自}中以设置其中的元素。因为,我们-
idx
的广播元素将用作来自indices
的行索引和列索引,用于索引到{idx = np.arange(matrix.shape[0])
因此,我们将以-
matrix[np.arange(matrix.shape[0])[:,None],indices]
用于设置元素。在这涉及到循环,因此对于大型阵列可能不是很有效
相关问题 更多 >
编程相关推荐