1
 y = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])

 indices_of_y = np.array([12, 0, 6, 3, 4, 9, 11, 2])

            z = np.array([1 , 1, 0, 1, 1, 1, 0,  0])

            x = np.array([1,  1, 1, 0, 1, 0, 0,  1])

 n = 3

我想比较数组 z 和 x 元素,我只想将 n 添加到 y 中 z 和 x 的元素不同的那些元素。在z和x的元素不同的情况下,我在indices_of_y指示的索引位置给y的元素加上n。

答案应该是:

y = [1, 2, 6, 7, 5, 6, 10, 8, 9, 13, 11, 12, 13, 14, 15, 16]  
4

1 回答 1

1

要测试元素相等,你做

z != x               #  array([False, False,  True,  True, False,  True, False,  True], dtype=bool)

可用于提取要使用的索引的结果

indices_of_y[z != x] #  array([6, 3, 9, 2])

反过来,您将其用作y. 但由于y是 2D 并且您的索引是 1D,我们需要先暂时展平y使用

y.ravel()            #  array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16])

由于y.ravel()返回一个视图而不是一个副本,我们可以直接操作所有元素并且也会看到 中的变化y。所以你把这三个结合起来

y.ravel()[indices_of_y[z != x]] += n

看看结果

print(y)
# array([[ 1,  2,  6,  7],
#        [ 5,  6, 10,  8],
#        [ 9, 13, 11, 12],
#        [13, 14, 15, 16]])
于 2017-05-05T07:39:17.420 回答