python 求关于mask的均值方差

该代码段展示了如何使用numpy库处理MaskedArray,计算包括中位数、平均值、标准差、最小值、最大值以及百分位数等统计量。它首先将数据类型转换为'float64',然后应用mask来忽略特定值,最后计算并返回统计结果。
摘要由CSDN通过智能技术生成

https://numpy.org/doc/stable/reference/generated/numpy.ma.mean.html

https://www.geeksforgeeks.org/numpy-maskedarray-mean-function-python/

https://stackoverflow.com/questions/37935954/how-can-i-run-a-numpy-function-percentile-on-a-masked-array/41673347

https://www.geeksforgeeks.org/change-data-type-of-given-numpy-array/

import numpy as np

def _compute_stats(vol, mask):
    oring_dtype = mask.dtype
    vol = vol.astype('float64')
    # print(oring_dtype)
    if len(vol) == 0:
        return np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan
    vol_mask = np.ma.masked_array(vol, mask=mask==0)
    # print(vol_mask)
    # median = np.median(vol)
    # mean = np.mean(vol)
    # sd = np.std(vol)
    # mn = np.min(vol)
    # mx = np.max(vol)
    # percentile_99_5 = np.percentile(vol, 99.5)
    # percentile_00_5 = np.percentile(vol, 00.5)
    # print(median, mean, sd, mn, mx, percentile_99_5, percentile_00_5)

    median = np.ma.median(vol_mask)
    mean = np.ma.mean(vol_mask)
    sd = np.ma.std(vol_mask)
    mn = np.ma.min(vol_mask)
    mx = np.ma.max(vol_mask)
    mdata = vol_mask.filled(np.nan)
    percentile_99_5 = np.nanpercentile(mdata, 99.5)
    percentile_00_5 = np.nanpercentile(mdata, 00.5)
    # print(median, mean, sd, mn, mx, percentile_99_5, percentile_00_5)

    return median, mean, sd, mn, mx, percentile_99_5, percentile_00_5
in_arr = np.array([[1, 2], [3, -1], [5, -3]])
mask = np.array([[1, 0], [1, 0], [0, 0]])
median, mean, sd, mn, mx, percentile_99_5, percentile_00_5 = _compute_stats(in_arr, mask)
print(median, mean, sd, mn, mx, percentile_99_5, percentile_00_5)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值