如果值大于,则替换整个数组

时间:2019-10-25 13:14:46

标签: python python-3.x numpy

我有以下形状为(2,6,3)的数组

[[[ 10.          0.          0.        ]
  [ 20.          0.          0.        ]
  [ 60.          0.          0.        ]
  [ 40.          0.          0.        ]
  [ 20.          0.          0.        ]
  [ 80.          0.          0.        ]]

 [[ 70.          0.          0.        ]
  [ 90.          0.          0.        ]
  [ 20.          0.          0.        ]
  [ 50.          0.          0.        ]
  [ 80.          0.          0.        ]
  [ 10.          0.          0.        ]]]

如果第一个值> = 50,我试图用[1 1 1]替换整个数组。 如果第一个值是<50,则整个数组应为[0 0 0]

所需的输出:

[[[ 0.          0.          0.        ]
  [ 0.          0.          0.        ]
  [ 1.          1.          1.        ]
  [ 0.          0.          0.        ]
  [ 0.          0.          0.        ]
  [ 1.          1.          1.        ]]

 [[ 1.          1.          1.        ]
  [ 1.          1.          1.        ]
  [ 0.          0.          0.        ]
  [ 1.          1.          1.        ]
  [ 1.          1.          1.        ]
  [ 0.          0.          0.        ]]]

我只能替换单个值,而不能替换完整的值。

关于如何做到这一点的任何想法

1 个答案:

答案 0 :(得分:3)

这是基于比较结果从包含[0,0,0][1,1,1]的数组中建立索引的一种方法:

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

b[(a[:,:,0] >= 50).view('i1')]

array([[[0, 0, 0],
        [0, 0, 0],
        [1, 1, 1],
        [0, 0, 0],
        [0, 0, 0],
        [1, 1, 1]],

       [[1, 1, 1],
        [1, 1, 1],
        [0, 0, 0],
        [1, 1, 1],
        [1, 1, 1],
        [0, 0, 0]]])