在numpy

时间:2016-11-18 03:17:01

标签: python arrays numpy

我有一个数组:

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中的第二个和第三个条目是Falsearr的第一行被复制到输出的第一行,arr的最后两行被复制到输出的最后两行,以便与{ {1}}中的{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]])