Numpy掩码数组masked arrays,这一篇就够了
生活随笔
收集整理的這篇文章主要介紹了
Numpy掩码数组masked arrays,这一篇就够了
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Numpy掩碼數組masked arrays,這一篇就夠了
- 1. 什么是掩碼數組
- 2.示例
- 2.1 一個例子走進掩碼數組
- 2.2 創建一個數組第二個值是無效的
- 2.3 創建一個數組所有靠近1.e20的值是無效的
- 2.4 只獲取有效項
- 2.5 取消標識無效(注意標識硬編碼的需要先軟化在標識)
- 2.6 修改Masked Array標記項為無效項
- 參考
- MaskedArray是numpy.ndarray的一個子類,因此它繼承了索引和切片機制。
1. 什么是掩碼數組
掩碼數組是包括可能缺少或無效項的數組。numpy.ma模塊為numpy提供了一個幾乎可以替代numpy的替代品,它支持帶掩碼的數據數組。
數組計算時,數據集可能是不完整的或者由于存在無效數據而使得計算結果是被污染的。 例如,傳感器可能無法記錄數據,或記錄了無效值。ma模塊通過引入屏蔽數組,提供了一種解決此問題的方便方法。
掩碼數組是標準numpy.ndarray和掩碼的組合。掩碼可以是nomask,表示關聯數組的值無效,也可以是boolean數組,用于確定關聯數組的每個元素的值是否有效。 當掩碼的某個元素為False時,關聯數組的相應元素有效,并被稱為未掩碼。當掩碼的一個元素為真時,關聯數組的相應元素被稱為掩碼(無效)。
該包確保在計算中不使用屏蔽項。
2.示例
概念有點抽象,看一個例子感受一下:
2.1 一個例子走進掩碼數組
掩碼數組可以幫助進行numpy的相應運算而忽略無效值
# 掩碼數組可以幫助進行numpy的相應運算而忽略無效值
import numpy as np
import numpy.ma as max = np.array([1, 2, 3, -1, 5])# 假設上述數組x中第4個值是無效的,那么可以建立一個掩碼數組如下mx
mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])# 接下來就可以忽略無效數據,而計算數據集x的平均值了
print(mx.mean())
# 得到結果2.75
ma模塊的主要特性是MaskedArray類,它是numpy.ndarray的一個子類。
numpy.ma模塊可用作numpy的附加模塊;
2.2 創建一個數組第二個值是無效的
import numpy.ma as ma
# 創建一個數組第二個值是無效的
y = ma.array([1, 2, 3], mask = [0, 1, 0])
2.3 創建一個數組所有靠近1.e20的值是無效的
import numpy.ma as ma
# 創建一個數組所有靠近1.e20的值是無效的
z = ma.masked_values([1.0, 1.e20, 3.0, 4.0], 1.e20)
2.4 只獲取有效項
import numpy.ma as ma# 只獲取有效項法一
x = ma.array([[1, 2], [3, 4]], mask=[[0, 1], [1, 0]])
print(x[~x.mask])
# masked_array(data=[1, 4],
# mask=[False, False],
# fill_value=999999)# 只獲取有效項法2
print(x.compressed())
# array([1, 4])
2.5 取消標識無效(注意標識硬編碼的需要先軟化在標識)
import numpy.ma as ma# 取消標識項無效
x = ma.array([1, 2, 3], mask=[0, 0, 1])
print(x)
# masked_array(data=[1, 2, --],
# mask=[False, False, True],
# fill_value=999999)
x[-1] = 5
print(x)
# masked_array(data=[1, 2, 5],
# mask=[False, False, False],
# fill_value=999999)x = ma.array([1, 2, 3], mask=[0, 0, 1], hard_mask=True)
print(x)
# masked_array(data=[1, 2, --],
# mask=[False, False, True],
# fill_value=999999)
x[-1] = 5
print(x)
# masked_array(data=[1, 2, --],
# mask=[False, False, True],
# fill_value=999999)
print(x.soften_mask())
# masked_array(data=[1, 2, --],
# mask=[False, False, True],
# fill_value=999999)
x[-1] = 5
print(x)
# masked_array(data=[1, 2, 5],
# mask=[False, False, False],
# fill_value=999999)
print(x.harden_mask())
# masked_array(data=[1, 2, 5],
# mask=[False, False, False],
# fill_value=999999)# 硬編碼的需要先軟化才可以標識取消無效
x = ma.array([1, 2, 3], mask=[0, 0, 1])
print(x)
# masked_array(data=[1, 2, --],
# mask=[False, False, True],
# fill_value=999999)
x.mask = ma.nomask
print(x)
# masked_array(data=[1, 2, 3],
# mask=[False, False, False],
# fill_value=999999)
2.6 修改Masked Array標記項為無效項
import numpy.ma as ma# 修改Masked Array標記項為無效項
x = ma.array([1, 2, 3])
x[0] = ma.masked
print(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
print(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
print(z)
# masked_array(data=[--, --, 3, 4],
# mask=[ True, True, False, False],
# fill_value=999999)
參考
- https://numpy.org/doc/stable/reference/maskedarray.html
總結
以上是生活随笔為你收集整理的Numpy掩码数组masked arrays,这一篇就够了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个带傻的QQ网名。
- 下一篇: 2015家居设计今年最流行色调风格!(转