bạn x
là 3x2 :
In [379]: x
Out[379]:
array([[1, 2],
[2, 3],
[3, 4]])
Thực hiện một 3 yếu tố boolean mặt nạ:
In [380]: rowmask=np.array([False,False,True])
Điều đó có thể được sử dụng để chọn các hàng mà nó là True, hoặc ở đâu Sai. Trong cả hai trường hợp, kết quả là 2d:
In [381]: x[rowmask,:]
Out[381]: array([[3, 4]])
In [382]: x[~rowmask,:]
Out[382]:
array([[1, 2],
[2, 3]])
Điều này là không sử dụng lớp con MaskedArray. Để tạo mảng như vậy, chúng tôi cần một mặt nạ phù hợp với hình dạng x
. Không có điều khoản để che giấu chỉ một chiều.
In [393]: xmask=np.stack((rowmask,rowmask),-1) # column stack
In [394]: xmask
Out[394]:
array([[False, False],
[False, False],
[ True, True]], dtype=bool)
In [395]: np.ma.MaskedArray(x,xmask)
Out[395]:
masked_array(data =
[[1 2]
[2 3]
[-- --]],
mask =
[[False False]
[False False]
[ True True]],
fill_value = 999999)
Áp dụng compressed
để mà tạo ra một mảng raveled: array([1, 2, 2, 3])
Kể từ khi mặt nạ là phần tử bằng phần tử, nó có thể che giấu một phần tử trong hàng 1, 2 trong dòng 2 vv Vì vậy, nói chung compressing
, tháo các phần tử được che chắn, sẽ không mang lại mảng 2d. Dạng phẳng là lựa chọn chung duy nhất.
np.ma
có ý nghĩa nhất khi có sự tán xạ các giá trị được đeo mặt nạ. Nó không có giá trị nhiều nếu bạn muốn chọn, hoặc bỏ chọn, toàn bộ hàng hoặc cột.
===============
Dưới đây là điển hình hơn mảng đeo mặt nạ:
In [403]: np.ma.masked_inside(x,2,3)
Out[403]:
masked_array(data =
[[1 --]
[-- --]
[-- 4]],
mask =
[[False True]
[ True True]
[ True False]],
fill_value = 999999)
In [404]: np.ma.masked_equal(x,2)
Out[404]:
masked_array(data =
[[1 --]
[-- 3]
[3 4]],
mask =
[[False True]
[ True False]
[False False]],
fill_value = 2)
In [406]: np.ma.masked_outside(x,2,3)
Out[406]:
masked_array(data =
[[-- 2]
[2 3]
[3 --]],
mask =
[[ True False]
[False False]
[False True]],
fill_value = 999999)
Ah tôi hiểu, vì vậy những gì tôi đang cố gắng làm việc, tôi chỉ không thể nén nó. Hm. là có một cách để loại bỏ các yếu tố đeo mặt nạ của một mảng mà không mất kích thước của mảng? 'np.ma.compressed()' thực hiện cả hai. – Anonymous
Tôi không quá nhiều về mảng bị che dấu, hoặc có thể là cùng cấp với bạn. Chỉ cần cố gắng để làm cho nó hoạt động. Vâng, nếu bạn đang cố gắng để loại bỏ các yếu tố, tôi nghĩ rằng chỉ số logic không phải là một cách xấu. – Psidom