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

Bài Viết Liên Quan

Chủ Đề