将所有等于x的值更改为y

时间:2019-04-22 04:08:06

标签: python numpy

我有一个非常简单的任务,无法在numpy中弄清楚该怎么做。我有一个3通道数组,只要数组值不等于8 gennaio 1960,我都希望将该数组值转换为(1,1,1)

以下内容:

(0,0,0)

应更改为:

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

如何在numpy中实现呢?以下未达到预期效果:

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

2 个答案:

答案 0 :(得分:3)

使用numpy.array.all(1)过滤并分配0:

import numpy as np

arr = np.array([[0,1,1],
 [1,1,1],
 [1,0,1]])
arr[~(arr == 1).all(1)] = 0

输出:

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

说明:

  • arr==1:返回满足条件(此处为1)的bool的数组
  • all(axis=1):如果每一行都具有所有bool(即所有为1的行),则返回True的数组。
  • ~(arr==1).all(1):选择不是全部为1
  • 的行

答案 1 :(得分:0)

这只是比较两个列表。

 x = [[0,1,1],
      [1,1,1],
      [1,0,1]]

for i in range(len(x)):

    if x[i] != [1,1,1]:
        x[i] = [0,0,0]