我有一个数组:
arr = np.array([[ 5.1, 3.5, 1.4, 0.2],
[ 4.6, 3.1, 1.5, 0.2],
[ 5. , 3.6, 1.4, 0.2]])
和索引数组:
index_arr = np.array([True, False, False, True, True])
和一个零的空矩阵:
output = np.array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
有没有办法可以使用numpy函数/索引技巧组合这些,以便我的数组的行根据索引数组替换零矩阵中的行?也就是说,我最终将此作为我的最终输出
>>> array([[ 5.1, 3.5, 1.4, 0.2],
[ 0., 0., 0., 0. ],
[ 0., 0., 0., 0. ],
[ 4.6, 3.1, 1.5, 0.2],
[ 5. , 3.6, 1.4, 0.2]])
如果我不清楚我想在这里做什么:输出的两个中间行是空的,因为index_arr
中的第二个和第三个条目是False
。 arr
的第一行被复制到输出的第一行,arr
的最后两行被复制到输出的最后两行,以便与{ {1}}中的{1}}值。
答案 0 :(得分:3)
您可以使用逻辑矢量索引进行子集化和赋值:
output[index_arr] = arr
#array([[ 5.1, 3.5, 1.4, 0.2],
# [ 0. , 0. , 0. , 0. ],
# [ 0. , 0. , 0. , 0. ],
# [ 4.6, 3.1, 1.5, 0.2],
# [ 5. , 3.6, 1.4, 0.2]])