簡體   English   中英

numpy:如何在numpy ndarray的某些列上使用masked_outside?

[英]numpy: how to use masked_outside on certain columns of a numpy ndarray?

我想做的是使用masked_outside函數來掩蓋不在給定ndarray范圍內的值,如

import numpy as np
import numpy.ma as ma

a = np.zeros((3,3))
a[1,1] = -1
a[2,1] = 1
a[0,2] = 1

b = ma.masked_outside(a, 0, 0)

然后我得到:

a = array([[ 0.,  0.,  1.],
           [ 0., -1.,  0.],
           [ 0.,  1.,  0.]])

b = masked_array(data =
  [[0.0 0.0 --]
   [0.0 -- 0.0]
   [0.0 -- 0.0]],
                 mask =
  [[False False  True]
   [False  True False]
   [False  True False]],
   fill_value = 1e+20)

但是,我想從屏蔽中排除某些列,例如:

 b = ma.masked_outside(a, 0, 0, exclude_cols=[2, ])

我該如何實現?

如果數組具有非平凡的dtype,即具有命名字段的數組,該怎么辦?

我認為numpy中沒有內置任何東西,但是手動構建蒙版應該不難。 這樣的事情行嗎? 該函數像masked_outside一樣構建布爾數組,並使用False填充排除的列

In [66]: def make_mask_outside(data, lower, upper, exclude_cols=None):
    ...:     mask = (data < lower) | (data > upper)
    ...:     if exclude_cols is not None:
    ...:         for c in exclude_cols:
    ...:             mask[:,c] = False
    ...:     return mask

In [67]: b = ma.masked_array(a, make_mask_outside(a, 0, 0, [2,]))

In [68]: b
Out[68]: 
masked_array(data =
 [[0.0 0.0 1.0]
 [0.0 -- 0.0]
 [0.0 -- 0.0]],
             mask =
 [[False False False]
 [False  True False]
 [False  True False]],
       fill_value = 1e+20)

您可以將掩碼與多種條件一起使用,並且在其中一種條件中考慮要排除的列號:

rows, cols = np.indices(a.shape)
b = np.ma.array(a, mask=((a!=0) & (cols!=2)))

#masked_array(data =
# [[0.0 0.0 1.0]
# [0.0 -- 0.0]
# [0.0 -- 0.0]],
#             mask =
# [[False False False]
# [False  True False]
# [False  True False]],
#       fill_value = 1e+20)

這可以擴展到更多列,例如: mask=((a!=0) & (cols!=2) & (cols!=3))等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM