首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:如何根据条件替换蒙面数组中的值

Python:如何根据条件替换蒙面数组中的值
EN

Stack Overflow用户
提问于 2013-11-13 16:54:51
回答 2查看 2.2K关注 0票数 4

我有个阵列。我希望将值> 5替换为1,将值<= 5替换为0。我还必须考虑无效值(999)。

1)我的阵列:

代码语言:javascript
复制
>>> import numpy
>>> a = numpy.array([   [[2, 5, 999],[0, 12, 1]], [[999, 8, 7],[7, 11, 6]]   ])
>>> a
array([[[  2,   5, 999],
        [  0,  12,   1]],

       [[999,   8,   7],
        [  7,  11,   6]]])

2)我掩盖了无效值:

代码语言:javascript
复制
>>> mask_a = (a==999)
>>> a_masked = numpy.ma.masked_array(a, mask = mask_a)
>>> print a_masked
[[[2 5 --]
  [0 12 1]]

 [[-- 8 7]
  [7 11 6]]]

3)我将值<= 5替换为零:

代码语言:javascript
复制
>>> a_masked[a_masked<=5]=0
>>> print a_masked
[[[0 0 --]
  [0 12 0]]

 [[-- 8 7]
  [7 11 6]]]

4)我现在想用1代替>5的值:

代码语言:javascript
复制
>>> a_masked[a_masked>5]=1
>>> print a_masked
[[[0 0 1]
  [0 1 0]]

 [[1 1 1]
  [1 1 1]]]

为什么它不考虑到values=999已经被蒙住了?

我想得到以下结果:

代码语言:javascript
复制
    [[[0 0 --]
      [0 1 0]]

     [[-- 1 1]
      [1 1 1]]]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-13 17:03:13

简单地说:

代码语言:javascript
复制
>>> a[a != 999] = (a[a != 999] > 5)
>>> a
array([[[  0,   0, 999],
        [  0,   1,   0]],

       [[999,   1,   1],
        [  1,   1,   1]]])
票数 6
EN

Stack Overflow用户

发布于 2013-11-13 17:06:27

代码语言:javascript
复制
a = np.piecewise(a, [a < 5, numpy.logical_and(a > 5,a <999) ,a >= 999], [0, 1,999])

我想只要一句台词就能做你想做的事。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19959740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档