Hướng dẫn what is a masked array python? - một con trăn mảng có mặt nạ là gì?

Cơ sở lý luận

Mảng đeo mặt nạ là các mảng có thể bị thiếu hoặc không hợp lệ. Mô-đun Numpy.MA cung cấp một sự thay thế gần như công việc cho Numpy hỗ trợ các mảng dữ liệu bằng mặt nạ.numpy.ma module provides a nearly work-alike replacement for numpy that supports data arrays with masks.

Mảng đeo mặt nạ là gì? ¶

Trong nhiều trường hợp, các bộ dữ liệu có thể không đầy đủ hoặc bị nhiễm độc bởi sự hiện diện của dữ liệu không hợp lệ. Ví dụ, một cảm biến có thể không ghi được dữ liệu hoặc ghi lại một giá trị không hợp lệ. Mô -đun Numpy.ma cung cấp một cách thuận tiện để giải quyết vấn đề này, bằng cách giới thiệu các mảng đeo mặt nạ.numpy.ma module provides a convenient way to address this issue, by introducing masked arrays.

Một mảng đeo mặt nạ là sự kết hợp của một numpy.ndarray tiêu chuẩn và mặt nạ. Mặt nạ là một trong hai danh nghĩa, chỉ ra rằng không có giá trị nào của mảng liên quan là không hợp lệ hoặc một mảng booleans xác định cho từng phần tử của mảng được liên kết cho dù giá trị có hợp lệ hay không. Khi một phần tử của mặt nạ là sai, phần tử tương ứng của mảng liên quan là hợp lệ và được cho là không được giải quyết. Khi một phần tử của mặt nạ là đúng, phần tử tương ứng của mảng liên quan được cho là bị che dấu (không hợp lệ).numpy.ndarray and a mask. A mask is either nomask, indicating that no value of the associated array is invalid, or an array of booleans that determines for each element of the associated array whether the value is valid or not. When an element of the mask is False, the corresponding element of the associated array is valid and is said to be unmasked. When an element of the mask is True, the corresponding element of the associated array is said to be masked (invalid).

Gói đảm bảo rằng các mục đeo mặt nạ không được sử dụng trong các tính toán.

Như một minh họa, hãy để xem xét các bộ dữ liệu sau:

>>> import numpy as np
>>> import numpy.ma as ma
>>> x = np.array([1, 2, 3, -1, 5])

Chúng tôi muốn đánh dấu mục thứ tư là không hợp lệ. Dễ nhất là tạo ra một mảng đeo mặt nạ:

>>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])

Bây giờ chúng ta có thể tính toán giá trị trung bình của bộ dữ liệu, mà không cần tính đến dữ liệu không hợp lệ:

Mô -đun Numpy.manumpy.ma module¶

Tính năng chính của mô -đun numpy.ma là lớp MaskedArray, là một lớp con của numpy.ndarray. Lớp, các thuộc tính và phương thức của nó được mô tả chi tiết hơn trong phần lớp MaskedArray.numpy.ma module is the MaskedArray class, which is a subclass of numpy.ndarray. The class, its attributes and methods are described in more details in the MaskedArray class section.

Mô -đun Numpy.MA có thể được sử dụng như một bổ sung cho Numpy:numpy.ma module can be used as an addition to numpy:

>>> import numpy as np
>>> import numpy.ma as ma

Để tạo một mảng với phần tử thứ hai không hợp lệ, chúng tôi sẽ làm:

>>> y = ma.array([1, 2, 3], mask = [0, 1, 0])

Để tạo một mảng đeo mặt nạ trong đó tất cả các giá trị gần 1.e20 không hợp lệ, chúng tôi sẽ làm:

>>> z = masked_values([1.0, 1.e20, 3.0, 4.0], 1.e20)

Để thảo luận đầy đủ về các phương thức tạo cho các mảng đeo mặt nạ, vui lòng xem phần Xây dựng các mảng đeo mặt nạ.

Sử dụng numpy.ma¶

Xây dựng các mảng đeo mặt nạ

Có một số cách để xây dựng một mảng đeo mặt nạ.

  • Một khả năng đầu tiên là trực tiếp gọi lớp MaskedArray.MaskedArray class.

  • Khả năng thứ hai là sử dụng hai hàm tạo mảng đeo mặt nạ, mảng và mặt nạ_array.array and masked_array.

    mảng (dữ liệu [, & nbsp; dtype, & nbsp; copy, & nbsp; order, & nbsp; mask, & nbsp; ...])))(data[, dtype, copy, order, mask, ...]) Một lớp mảng có giá trị đeo mặt nạ có thể.
    masked_array Bí danh của MaskedArrayMaskedArray
  • Tùy chọn thứ ba là đưa ra chế độ xem của một mảng hiện có. Trong trường hợp đó, mặt nạ của chế độ xem được đặt thành Nomask nếu mảng không có trường tên hoặc một mảng boolean có cùng cấu trúc với mảng khác.nomask if the array has no named fields, or an array of boolean with the same structure as the array otherwise.

    >>> x = np.array([1, 2, 3])
    >>> x.view(ma.MaskedArray)
    masked_array(data = [1 2 3],
                 mask = False,
           fill_value = 999999)
    >>> x = np.array([(1, 1.), (2, 2.)], dtype=[('a',int), ('b', float)])
    >>> x.view(ma.MaskedArray)
    masked_array(data = [(1, 1.0) (2, 2.0)],
                 mask = [(False, False) (False, False)],
           fill_value = (999999, 1e+20),
                dtype = [('a', '
    

  • Tuy nhiên, một khả năng khác là sử dụng bất kỳ chức năng nào sau đây:

    Asarray (A [, & NBSP; DTYPE, & nbsp; Order])(a[, dtype, order]) Chuyển đổi đầu vào thành một mảng đeo mặt nạ của loại dữ liệu đã cho.
    Asanyarray (A [, & NBSP; DTYPE])(a[, dtype]) Chuyển đổi đầu vào thành một mảng đeo mặt nạ, bảo tồn các lớp con.
    FIX_INVALID (A [, & NBSP; Mặt nạ, & nbsp; Sao chép, & nbsp; fill_value])(a[, mask, copy, fill_value]) Trả về đầu vào với dữ liệu không hợp lệ được che dấu và thay thế bằng giá trị điền.
    Mặt nạ_equal (x, & nbsp; value [, & nbsp; sao chép])(x, value[, copy]) Mặt nạ một mảng trong đó bằng một giá trị nhất định.
    Mặt nạ_greater (x, & nbsp; value [, & nbsp; sao chép])(x, value[, copy]) Mặt nạ một mảng trong đó lớn hơn một giá trị nhất định.
    Mặt nạ_greater_equal (x, & nbsp; value [, & nbsp; sao chép]))(x, value[, copy]) Mặt nạ một mảng trong đó lớn hơn hoặc bằng một giá trị nhất định.
    Masked_Inside (x, & nbsp; v1, & nbsp; v2 [, & nbsp; sao chép])(x, v1, v2[, copy]) Mặt nạ một mảng bên trong một khoảng thời gian nhất định.
    Mặt nạ_invalid (A [, & nbsp; sao chép])(a[, copy]) Mặt nạ một mảng nơi xảy ra các giá trị không hợp lệ (NANS hoặc INF).
    Masked_less (x, & nbsp; value [, & nbsp; sao chép])(x, value[, copy]) Mặt nạ một mảng trong đó ít hơn một giá trị nhất định.
    Masked_less_equal (x, & nbsp; value [, & nbsp; sao chép])(x, value[, copy]) Mặt nạ một mảng trong đó ít hơn hoặc bằng một giá trị nhất định.
    Mặt nạ_not_equal (x, & nbsp; value [, & nbsp; sao chép])(x, value[, copy]) Mặt nạ một mảng trong đó không bằng một giá trị nhất định.
    Masked_Object (x, & nbsp; value [, & nbsp; copy, & nbsp; co lại]))(x, value[, copy, shrink]) Mặt nạ mảng X trong đó dữ liệu chính xác bằng giá trị.
    Mặt nạ(x, v1, v2[, copy]) Mặt nạ một mảng bên ngoài một khoảng thời gian nhất định.
    Mặt nạ_values ​​(x, & nbsp; value [, & nbsp; rtol, & nbsp; atol, & nbsp; copy, & nbsp; ...])(x, value[, rtol, atol, copy, ...]) Mặt nạ sử dụng bình đẳng điểm nổi.
    Masked_where (điều kiện, & nbsp; a [, & nbsp; sao chép])(condition, a[, copy]) Mặt nạ một mảng nơi đáp ứng một điều kiện.

Truy cập dữ liệu Jo

Dữ liệu cơ bản của một mảng đeo mặt nạ có thể được truy cập theo nhiều cách:

  • thông qua thuộc tính dữ liệu. Đầu ra là một chế độ xem của mảng dưới dạng numpy.ndarray hoặc một trong các lớp con của nó, tùy thuộc vào loại dữ liệu cơ bản tại tạo mảng đeo mặt nạ.data attribute. The output is a view of the array as a numpy.ndarray or one of its subclasses, depending on the type of the underlying data at the masked array creation.
  • Thông qua phương thức __array__. Đầu ra sau đó là một numpy.ndarray.__array__ method. The output is then a numpy.ndarray.
  • Bằng cách trực tiếp xem một cái nhìn của mảng đeo mặt nạ dưới dạng numpy.ndarray hoặc một trong các lớp con của nó (thực sự là những gì sử dụng thuộc tính dữ liệu làm).numpy.ndarray or one of its subclass (which is actually what using the data attribute does).
  • bằng cách sử dụng chức năng GetData.getdata function.

Không có phương pháp nào trong số này là hoàn toàn thỏa đáng nếu một số mục đã được đánh dấu là không hợp lệ. Theo nguyên tắc chung, trong đó yêu cầu một biểu diễn của mảng mà không cần bất kỳ mục nào bị che giấu, nên điền vào mảng bằng phương thức điền.filled method.

Truy cập mặt nạ

Mặt nạ của một mảng đeo mặt nạ có thể truy cập thông qua thuộc tính mặt nạ của nó. Chúng ta phải nhớ rằng một mục nhập thực trong mặt nạ cho biết dữ liệu không hợp lệ.mask attribute. We must keep in mind that a True entry in the mask indicates an invalid data.

Một khả năng khác là sử dụng các hàm GetMask và Getmaskarray. GetMask (x) xuất ra mặt nạ của X nếu X là một mảng đeo mặt nạ và giá trị đặc biệt khác. GetMaskArray (x) đầu ra mặt nạ của X nếu X là một mảng đeo mặt nạ. Nếu X không có mục nhập không hợp lệ hoặc không phải là một mảng đeo mặt nạ, hàm sẽ xuất ra một mảng boolean sai với nhiều phần tử như x.getmask and getmaskarray functions. getmask(x) outputs the mask of x if x is a masked array, and the special value nomask otherwise. getmaskarray(x) outputs the mask of x if x is a masked array. If x has no invalid entry or is not a masked array, the function outputs a boolean array of False with as many elements as x.

Chỉ truy cập các mục hợp lệ

Để chỉ truy xuất các mục hợp lệ, chúng ta có thể sử dụng nghịch đảo của mặt nạ làm chỉ mục. Nghịch đảo của mặt nạ có thể được tính toán với chức năng numpy.logical_not hoặc đơn giản là với toán tử ~:numpy.logical_not function or simply with the ~ operator:

>>> x = ma.array([[1, 2], [3, 4]], mask=[[0, 1], [1, 0]])
>>> x[~x.mask]
masked_array(data = [1 4],
             mask = [False False],
       fill_value = 999999)

Một cách khác để truy xuất dữ liệu hợp lệ là sử dụng phương thức nén, trả về một ndarray một chiều (hoặc một trong các lớp con của nó, tùy thuộc vào giá trị của thuộc tính baseclass):compressed method, which returns a one-dimensional ndarray (or one of its subclasses, depending on the value of the baseclass attribute):

>>> x.compressed()
array([1, 4])

Lưu ý rằng đầu ra của nén luôn là 1D.compressed is always 1D.

Sửa đổi mặt nạ

Mặt nạ một mục nhập

Cách được đề xuất để đánh dấu một hoặc một số mục cụ thể của mảng đeo mặt nạ là không hợp lệ là gán giá trị đặc biệt được che dấu cho chúng:masked to them:

>>> x = ma.array([1, 2, 3])
>>> x[0] = ma.masked
>>> x
masked_array(data = [-- 2 3],
             mask = [ True False False],
       fill_value = 999999)
>>> y = ma.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> y[(0, 1, 2), (1, 2, 0)] = ma.masked
>>> y
masked_array(data =
 [[1 -- 3]
  [4 5 --]
  [-- 8 9]],
             mask =
 [[False  True False]
  [False False  True]
  [ True False False]],
       fill_value = 999999)
>>> z = ma.array([1, 2, 3, 4])
>>> z[:-2] = ma.masked
>>> z
masked_array(data = [-- -- 3 4],
             mask = [ True  True False False],
       fill_value = 999999)

Khả năng thứ hai là sửa đổi mặt nạ trực tiếp, nhưng cách sử dụng này không được khuyến khích.mask directly, but this usage is discouraged.

Ghi chú

Khi tạo một mảng đeo mặt nạ mới với kiểu dữ liệu đơn giản, không cấu trúc, mặt nạ ban đầu được đặt thành giá trị đặc biệt Nomask, tương ứng với FALSE BOLEAN. Cố gắng đặt một yếu tố của Nomask sẽ thất bại với ngoại lệ kiểu kiểu, vì Boolean không hỗ trợ gán mục.nomask, that corresponds roughly to the boolean False. Trying to set an element of nomask will fail with a TypeError exception, as a boolean does not support item assignment.

Tất cả các mục của một mảng có thể được che giấu cùng một lúc bằng cách gán đúng cho mặt nạ:True to the mask:

>>> x = ma.array([1, 2, 3], mask=[0, 0, 1])
>>> x.mask = True
>>> x
masked_array(data = [-- -- --],
             mask = [ True  True  True],
       fill_value = 999999)

Cuối cùng, các mục cụ thể có thể được che giấu và/hoặc được mở ra bằng cách gán cho mặt nạ một chuỗi booleans:

>>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])
0

Bỏ ra một mục nhập bài

Để giải quyết một hoặc một số mục cụ thể, chúng tôi chỉ có thể gán một hoặc một số giá trị hợp lệ mới cho chúng:

>>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])
1

Ghi chú

Khi tạo một mảng đeo mặt nạ mới với kiểu dữ liệu đơn giản, không cấu trúc, mặt nạ ban đầu được đặt thành giá trị đặc biệt Nomask, tương ứng với FALSE BOLEAN. Cố gắng đặt một yếu tố của Nomask sẽ thất bại với ngoại lệ kiểu kiểu, vì Boolean không hỗ trợ gán mục.hardmask attribute. This feature was introduced to prevent overwriting the mask. To force the unmasking of an entry where the array has a hard mask, the mask must first to be softened using the soften_mask method before the allocation. It can be re-hardened with harden_mask:

>>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])
2

Tất cả các mục của một mảng có thể được che giấu cùng một lúc bằng cách gán đúng cho mặt nạ:nomask to the mask:

>>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])
3

Cuối cùng, các mục cụ thể có thể được che giấu và/hoặc được mở ra bằng cách gán cho mặt nạ một chuỗi booleans:

Bỏ ra một mục nhập bàiMaskedArray is a subclass of numpy.ndarray, it inherits its mechanisms for indexing and slicing.

Để giải quyết một hoặc một số mục cụ thể, chúng tôi chỉ có thể gán một hoặc một số giá trị hợp lệ mới cho chúng:False) or the special value masked (if the corresponding entry of the mask is True):

>>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])
4

Bỏ qua một mục nhập bằng cách gán trực tiếp sẽ âm thầm thất bại nếu mảng đeo mặt nạ có mặt nạ cứng, như được hiển thị bởi thuộc tính Hardmask. Tính năng này đã được giới thiệu để ngăn chặn việc ghi đè mặt nạ. Để buộc làm nổi bật một mục trong đó mảng có mặt nạ cứng, trước tiên, mặt nạ phải được làm mềm bằng phương pháp SEFTEN_MASK trước khi phân bổ. Nó có thể được làm cứng lại bằng Harden_mask:numpy.void object if none of the fields are masked, or a 0d masked array with the same dtype as the initial array if at least one of the fields is masked.

>>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])
5

Để vạch mặt tất cả các mục mặt nạ của một mảng đeo mặt nạ (với điều kiện mặt nạ không phải là mặt nạ cứng), giải pháp đơn giản nhất là gán Nomask không đổi cho mặt nạ:data attribute is a view of the original data, and whose mask is either nomask (if there was no invalid entries in the original array) or a copy of the corresponding slice of the original mask. The copy is required to avoid propagation of any modification of the mask to the original.

>>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])
6

Lập chỉ mục và cắt látMaskedArray.

Là một mặt nạ là một lớp con của numpy.ndarray, nó kế thừa các cơ chế của nó để lập chỉ mục và cắt lát.

Khi truy cập vào một mục nhập của một mảng đeo mặt nạ không có trường được đặt tên, đầu ra là vô hướng (nếu mục nhập tương ứng của mặt nạ là sai) hoặc giá trị đặc biệt được che dấu (nếu mục nhập tương ứng của mặt nạ là đúng):data entries should be the same before and after the operation.

Nếu mảng đeo mặt nạ có tên là các trường, việc truy cập một mục nhập sẽ trả về một đối tượng numpy.void nếu không có trường nào được che dấu hoặc một mảng đeo mặt nạ 0D với cùng DTYPE với mảng ban đầu nếu ít nhất một trong các trường được che dấu.

Khi truy cập một lát, đầu ra là một mảng được che mặt nạ. Bản sao được yêu cầu để tránh truyền bất kỳ sửa đổi nào của mặt nạ sang bản gốc.

Truy cập một trường của một mảng đeo mặt nạ với kiểu dữ liệu có cấu trúc trả về một mặt nạ.numpy.ma module comes with a specific implementation of most ufuncs. Unary and binary functions that have a validity domain (such as log or divide) return the masked constant whenever the input is masked or falls outside the validity domain:

>>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])
7

Hoạt động trên các mảng đeo mặt nạ

>>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])
8

Ví dụ;

Dữ liệu có giá trị nhất định đại diện cho dữ liệu bị thiếu

Hãy cùng xem xét một danh sách các yếu tố, x, trong đó các giá trị của -9999. Đại diện cho dữ liệu bị thiếu. Chúng tôi muốn tính toán giá trị trung bình của dữ liệu và vectơ của sự bất thường (độ lệch so với mức trung bình):x, where values of -9999. represent missing data. We wish to compute the average value of the data and the vector of anomalies (deviations from the average):

>>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])
9

Điền vào dữ liệu bị thiếu

Giả sử bây giờ chúng ta muốn in cùng một dữ liệu đó, nhưng với các giá trị bị thiếu được thay thế bằng giá trị trung bình.

>>> import numpy as np
>>> import numpy.ma as ma
0

Hoạt động số

Các hoạt động số có thể được thực hiện dễ dàng mà không phải lo lắng về các giá trị bị thiếu, chia cho số 0, gốc vuông của các số âm, v.v.:

>>> import numpy as np
>>> import numpy.ma as ma
1

Bốn giá trị của đầu ra không hợp lệ: giá trị đầu tiên đến từ việc lấy căn bậc hai của số âm, thứ hai từ phân chia theo 0 và hai cái cuối cùng mà các đầu vào được che dấu.

Bỏ qua các giá trị cực đoan

Hãy cùng xem xét một mảng d của các phao ngẫu nhiên trong khoảng từ 0 đến 1. Chúng tôi muốn tính toán trung bình của các giá trị của D trong khi bỏ qua bất kỳ dữ liệu nào bên ngoài phạm vi [0,1,0.9]:d of random floats between 0 and 1. We wish to compute the average of the values of d while ignoring any data outside the range [0.1, 0.9]:

>>> import numpy as np
>>> import numpy.ma as ma
2

Làm cách nào để làm mặt nạ mảng trong Python?

Nhập Numpy như NP Nhập Numpy.MA là MA. ....
mảng = np.array ([[71, 55, 91], [82, 33, 39], [73, 82, 51], [90, 45, 82]]) in ("Array ... \ n" , mảng) ....
in ("\ narray loại ... \ n", mảng.dtype) ....
in ("\ narray kích thước ... \ n", mảng.ndim) ....
in ("\ nour hình dạng mảng ... \ n", Arr.Shape).

Mặt nạ Python là gì?

Định nghĩa và cách sử dụng.Phương thức mặt nạ () thay thế các giá trị của các hàng trong đó điều kiện đánh giá là true.Phương thức mặt nạ () đối diện với phương thức ở đâu ().replaces the values of the rows where the condition evaluates to True. The mask() method is the opposite of the The where() method.

Làm thế nào để bạn che dấu các giá trị nan trong python?

Để che dấu một mảng nơi xảy ra các giá trị không hợp lệ (NANS hoặc INF), hãy sử dụng phương thức numpy.ma.masked_invalid () trong python numpy.Hàm này là một lối tắt đến Masked_where, với điều kiện = ~ (NP.use the numpy. ma. masked_invalid() method in Python Numpy. This function is a shortcut to masked_where, with condition = ~(np.

Làm thế nào để bạn làm mặt nạ boolean trong Python?

Để tạo mặt nạ boolean từ một mảng, hãy sử dụng phương thức Ma.Make_make () trong Python Numpy.Hàm có thể chấp nhận bất kỳ chuỗi nào có thể chuyển đổi cho các số nguyên hoặc nomask.Không yêu cầu nội dung phải là 0 và 1, giá trị 0 được hiểu là sai, mọi thứ khác là đúng.use the ma. make_mask() method in Python Numpy. The function can accept any sequence that is convertible to integers, or nomask. Does not require that contents must be 0s and 1s, values of 0 are interpreted as False, everything else as True.