Hướng dẫn how do you apply a mask to an array in python? - làm thế nào để bạn áp dụng một mặt nạ cho một mảng trong python?

Tôi đã đọc tài liệu mảng đeo mặt nạ nhiều lần, tìm kiếm ở khắp mọi nơi và cảm thấy hoàn toàn ngu ngốc. Tôi không thể tìm ra cuộc sống trong tôi làm thế nào để áp dụng mặt nạ từ mảng này sang mảng khác.

Example:

import numpy as np

y = np.array([2,1,5,2])          # y axis
x = np.array([1,2,3,4])          # x axis
m = np.ma.masked_where(y>2, y)   # filter out values larger than 5
print m
[2 1 -- 2]
print np.ma.compressed(m)
[2 1 2]

Vì vậy, điều này hoạt động tốt .... nhưng để vẽ trục y này, tôi cần một trục X phù hợp. Làm cách nào để áp dụng mặt nạ từ mảng y vào mảng X? Một cái gì đó như thế này sẽ có ý nghĩa, nhưng tạo ra rác rưởi:

new_x = x[m.mask].copy()
new_x
array([5])

Vì vậy, làm thế nào trên trái đất được thực hiện (lưu ý mảng X mới cần phải là một mảng mới).

Edit:

Chà, có vẻ như một cách để làm điều này hoạt động như thế này:

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]

Nhưng điều đó thật lộn xộn! Tôi đang cố gắng tìm một giải pháp thanh lịch như IDL ...

Rationale#

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

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
6 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ạ.

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

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
6 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ạ.

Một mảng đeo mặt nạ là sự kết hợp của một

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
8 tiêu chuẩn và mặt nạ. Mặt nạ là
>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
9, chỉ ra rằng không có giá trị nào của mảng liên quan 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 liên quan cho dù giá trị có hợp lệ hay không. Khi một phần tử của mặt nạ là
>>> import numpy as np
>>> import numpy.ma as ma
>>> x = np.array([1, 2, 3, -1, 5])
0, 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à
>>> import numpy as np
>>> import numpy.ma as ma
>>> x = np.array([1, 2, 3, -1, 5])
1, 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ệ).

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 >>> import numpy as np >>> x = np.array([1,2,3,4]) >>> y = np.array([2,1,5,2]) >>> m = np.ma.masked_where(y>2, y) >>> new_x = np.ma.masked_array(x, m.mask) >>> print np.ma.compressed(new_x) [1 2 4] 6#

Tính năng chính của mô -đun

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
6 là lớp
>>> import numpy as np
>>> import numpy.ma as ma
>>> x = np.array([1, 2, 3, -1, 5])
4, là một lớp con của
>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
8. 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.MaskedArray class section.

Mô -đun

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
6 có thể được sử dụng như là một bổ sung cho
>>> import numpy as np
>>> import numpy.ma as ma
>>> x = np.array([1, 2, 3, -1, 5])
7:

>>> 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 = ma.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ạ.Constructing masked arrays.

Sử dụng numpy.ma#

Xây dựng 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

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

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

    >>> import numpy as np
    >>> import numpy.ma as ma
    >>> x = np.array([1, 2, 3, -1, 5])
    
    9 và
    >>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])
    
    0.

    >>> import numpy as np
    >>> import numpy.ma as ma
    >>> x = np.array([1, 2, 3, -1, 5])
    
    9(data[, dtype, copy, order, mask, ...])

    Một lớp mảng có giá trị đeo mặt nạ có thể.

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

    bí danh của

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

  • 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

    >>> import numpy as np
    >>> x = np.array([1,2,3,4])
    >>> y = np.array([2,1,5,2])
    >>> m = np.ma.masked_where(y>2, y)
    >>> new_x = np.ma.masked_array(x, m.mask)
    >>> print np.ma.compressed(new_x)
    [1 2 4]
    
    9 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.

    >>> 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, 1.e+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:

    >>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])
    
    5(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.

    >>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])
    
    6(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.

    >>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])
    
    7(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.

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

    Mặt nạ một mảng trong đó bằng một giá trị nhất định.

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

    Mặt nạ một mảng trong đó lớn hơn một giá trị nhất định.

    >>> import numpy as np
    >>> import numpy.ma as ma
    
    0(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.

    >>> import numpy as np
    >>> import numpy.ma as ma
    
    1(x, v1, v2[, copy])

    Mặt nạ một mảng bên trong một khoảng thời gian nhất định.

    >>> import numpy as np
    >>> import numpy.ma as ma
    
    2(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).

    >>> import numpy as np
    >>> import numpy.ma as ma
    
    3(x, value[, copy])

    Mặt nạ một mảng trong đó ít hơn một giá trị nhất định.

    >>> import numpy as np
    >>> import numpy.ma as ma
    
    4(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.

    >>> import numpy as np
    >>> import numpy.ma as ma
    
    5(x, value[, copy])

    Mặt nạ một mảng trong đó không bằng một giá trị nhất định.

    >>> import numpy as np
    >>> import numpy.ma as ma
    
    6(x, value[, copy, shrink])

    Mặt nạ mảng X trong đó dữ liệu chính xác bằng giá trị.

    >>> import numpy as np
    >>> import numpy.ma as ma
    
    7(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.

    >>> import numpy as np
    >>> import numpy.ma as ma
    
    8(x, value[, rtol, atol, copy, ...])

    Mặt nạ sử dụng bình đẳng điểm nổi.

    >>> import numpy as np
    >>> import numpy.ma as ma
    
    9(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#

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

    >>> y = ma.array([1, 2, 3], mask = [0, 1, 0])
    
    0. Đầu ra là chế độ xem của mảng dưới dạng
    >>> import numpy as np
    >>> x = np.array([1,2,3,4])
    >>> y = np.array([2,1,5,2])
    >>> m = np.ma.masked_where(y>2, y)
    >>> new_x = np.ma.masked_array(x, m.mask)
    >>> print np.ma.compressed(new_x)
    [1 2 4]
    
    8 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 bị che khuất.

  • thông qua phương pháp

    >>> y = ma.array([1, 2, 3], mask = [0, 1, 0])
    
    2. Đầu ra sau đó là
    >>> import numpy as np
    >>> x = np.array([1,2,3,4])
    >>> y = np.array([2,1,5,2])
    >>> m = np.ma.masked_where(y>2, y)
    >>> new_x = np.ma.masked_array(x, m.mask)
    >>> print np.ma.compressed(new_x)
    [1 2 4]
    
    8.

  • 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

    >>> import numpy as np
    >>> x = np.array([1,2,3,4])
    >>> y = np.array([2,1,5,2])
    >>> m = np.ma.masked_where(y>2, y)
    >>> new_x = np.ma.masked_array(x, m.mask)
    >>> print np.ma.compressed(new_x)
    [1 2 4]
    
    8 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
    >>> y = ma.array([1, 2, 3], mask = [0, 1, 0])
    
    0).

  • bằng cách sử dụng hàm

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

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 được đeo mặt nạ, nên điền vào mảng bằng phương pháp

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

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

>>> y = ma.array([1, 2, 3], mask = [0, 1, 0])
8 của nó. Chúng ta phải nhớ rằng một mục
>>> import numpy as np
>>> import numpy.ma as ma
>>> x = np.array([1, 2, 3, -1, 5])
1 trong mặt nạ cho biết dữ liệu không hợp lệ.

Một khả năng khác là sử dụng các hàm

>>> z = ma.masked_values([1.0, 1.e20, 3.0, 4.0], 1.e20)
0 và
>>> z = ma.masked_values([1.0, 1.e20, 3.0, 4.0], 1.e20)
1.
>>> z = ma.masked_values([1.0, 1.e20, 3.0, 4.0], 1.e20)
2 đầu ra mặt nạ của
>>> z = ma.masked_values([1.0, 1.e20, 3.0, 4.0], 1.e20)
3 nếu
>>> z = ma.masked_values([1.0, 1.e20, 3.0, 4.0], 1.e20)
3 là một mảng đeo mặt nạ và giá trị đặc biệt
>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
9 khác.
>>> z = ma.masked_values([1.0, 1.e20, 3.0, 4.0], 1.e20)
6 đầu ra mặt nạ của
>>> z = ma.masked_values([1.0, 1.e20, 3.0, 4.0], 1.e20)
3 nếu
>>> z = ma.masked_values([1.0, 1.e20, 3.0, 4.0], 1.e20)
3 là một mảng đeo mặt nạ. Nếu
>>> z = ma.masked_values([1.0, 1.e20, 3.0, 4.0], 1.e20)
3 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 là
>>> import numpy as np
>>> import numpy.ma as ma
>>> x = np.array([1, 2, 3, -1, 5])
0 với nhiều phần tử như
>>> z = ma.masked_values([1.0, 1.e20, 3.0, 4.0], 1.e20)
3.

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 hàm

>>> 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, 1.e+20),
            dtype=[('a', '
2 hoặc đơn giản là với toán tử
>>> 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, 1.e+20),
            dtype=[('a', '
3:

>>> 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

>>> 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, 1.e+20),
            dtype=[('a', '
4, trả về
>>> 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, 1.e+20),
            dtype=[('a', '
5 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
>>> 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, 1.e+20),
            dtype=[('a', '
6):

new_x = x[m.mask].copy()
new_x
array([5])
0

Lưu ý rằng đầu ra của

>>> 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, 1.e+20),
            dtype=[('a', '
4 luôn là 1D.

Sửa đổi mặt nạ#

Che 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

>>> 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, 1.e+20),
            dtype=[('a', '
8 cho chúng:

new_x = x[m.mask].copy()
new_x
array([5])
1

Khả năng thứ hai là sửa đổi trực tiếp

>>> y = ma.array([1, 2, 3], mask = [0, 1, 0])
8, nhưng cách sử dụng này không được khuyến khích.

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

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
9, tương ứng với Boolean
>>> import numpy as np
>>> import numpy.ma as ma
>>> x = np.array([1, 2, 3, -1, 5])
0. Cố gắng đặt một yếu tố
>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
9 sẽ thất bại với ngoại lệ
>>> 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)
3, vì Boolean không hỗ trợ gán mục.

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

>>> import numpy as np
>>> import numpy.ma as ma
>>> x = np.array([1, 2, 3, -1, 5])
1 cho mặt nạ:

new_x = x[m.mask].copy()
new_x
array([5])
2

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:

new_x = x[m.mask].copy()
new_x
array([5])
3

Bỏ ra một mục nhập#

Để 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:

new_x = x[m.mask].copy()
new_x
array([5])
4

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

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
9, tương ứng với Boolean
>>> import numpy as np
>>> import numpy.ma as ma
>>> x = np.array([1, 2, 3, -1, 5])
0. Cố gắng đặt một yếu tố
>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
9 sẽ thất bại với ngoại lệ
>>> 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)
3, vì Boolean không hỗ trợ gán mục.

new_x = x[m.mask].copy()
new_x
array([5])
5

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

>>> import numpy as np
>>> import numpy.ma as ma
>>> x = np.array([1, 2, 3, -1, 5])
1 cho mặt nạ:

new_x = x[m.mask].copy()
new_x
array([5])
6

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#

Để 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:

new_x = x[m.mask].copy()
new_x
array([5])
7

Bỏ ra 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

>>> 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)
5. 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
>>> 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)
6 trước khi phân bổ. Nó có thể được làm cứng lại với
>>> 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)
7:

new_x = x[m.mask].copy()
new_x
array([5])
8

Để 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 hằng số

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
9 cho mặt nạ:

new_x = x[m.mask].copy()
new_x
array([5])
9

Lập chỉ mục và cắt#

Vì >>> import numpy as np >>> import numpy.ma as ma >>> x = np.array([1, 2, 3, -1, 5]) 4 là một lớp con của >>> import numpy as np >>> x = np.array([1,2,3,4]) >>> y = np.array([2,1,5,2]) >>> m = np.ma.masked_where(y>2, y) >>> new_x = np.ma.masked_array(x, m.mask) >>> print np.ma.compressed(new_x) [1 2 4] 8, nó kế thừa các cơ chế của nó để lập chỉ mục và cắ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ên, đầu ra là vô hướng (nếu mục nhập tương ứng của mặt nạ là

>>> import numpy as np
>>> import numpy.ma as ma
>>> x = np.array([1, 2, 3, -1, 5])
0) hoặc giá trị đặc biệt
>>> 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, 1.e+20),
            dtype=[('a', '
8 (nếu mục nhập tương ứng của mặt nạ là
>>> import numpy as np
>>> import numpy.ma as ma
>>> x = np.array([1, 2, 3, -1, 5])
1):

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

new_x = x[m.mask].copy()
new_x
array([5])
04 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ạ. Quan điểm được yêu cầu để đảm bảo tuyên truyền bất kỳ sửa đổi 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

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

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
0

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

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
1

Examples#

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ố,

>>> z = ma.masked_values([1.0, 1.e20, 3.0, 4.0], 1.e20)
3, 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):

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
2

Đ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
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
3

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 số âm, v.v.:

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
4

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

new_x = x[m.mask].copy()
new_x
array([5])
14 của các phao nổi 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
new_x = x[m.mask].copy()
new_x
array([5])
14 trong khi bỏ qua bất kỳ dữ liệu nào bên ngoài phạm vi
new_x = x[m.mask].copy()
new_x
array([5])
16:

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
5

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

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.the combination of a standard 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.

Làm thế nào để bạn làm mặt nạ 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.

Làm thế nào để mặt nạ hoạt động trong Python?

Hàm Mặt nạ () Trả về một đối tượng có hình dạng giống như bản thân và các mục tương ứng là từ bản thân nơi cond là sai và mặt khác là từ các đối tượng khác.Đối tượng khác có thể là vô hướng, sê -ri, dataFrame hoặc có thể là một người có thể gọi được.Phương pháp mặt nạ là một ứng dụng của thành ngữ if-then.return an object of same shape as self and whose corresponding entries are from self where cond is False and otherwise are from other object. The other object could be a scalar, series, dataframe or could be a callable. The mask method is an application of the if-then idiom.

Làm thế nào để bạn gán một phần tử cho một mảng trong Python?

Nếu bạn đang sử dụng danh sách làm mảng, bạn có thể sử dụng các hàm append (), chèn () và mở rộng () của nó.Bạn có thể đọc thêm về nó tại Python thêm vào danh sách.Nếu bạn đang sử dụng mô -đun mảng, bạn có thể sử dụng cách ghép bằng toán tử +, append (), chèn () và mở rộng () các hàm để thêm các phần tử vào mảng.use the concatenation using the + operator, append(), insert(), and extend() functions to add elements to the array.