gpt4 book ai didi

python - Numpy 数组均值函数在均值计算中未排除屏蔽元素

转载 作者:太空宇宙 更新时间:2023-11-03 17:31:46 25 4
gpt4 key购买 nike

我是Python编程新手,如果我的问题太基础,请原谅我。但我尝试使用 masked_array 计算三个数组的平均值以生成第三个数组,而不使用值小于零的元素。使用这些步骤:

import numpy as np
from numpy.ma import masked_array

d=[]
a = np.array([[-2,-3,-4,-6],[5,2,6,1],[9,3,2,4],[3,1,1,2]])
b = np.array([[3,4,2,4],[5,2,6,1],[9,3,2,4],[0.3,12,1,3]])
c = np.array([[2,3,4,5],[7,0,1,5],[10,9,2,3],[1.5,2.01,2,0.2]])

mask = (a <= 0).astype(int)
a = masked_array(a,mask)

d.append(a)
d.append(b)
d.append(c)
result = np.array(d).mean(axis=0)
print result

[[ 1. 1.33333333 0.66666667 1. ]
[ 5.66666667 1.33333333 4.33333333 2.33333333]
[ 9.33333333 5. 2. 3.66666667]
[ 1.6 5.00333333 1.33333333 1.73333333]]

我认为(从文档中)如果在具有掩码值的数组上使用 numpy 数组均值函数,则在计算平均值时不会考虑它们(掩码值)。我预计结果是

[[  2.5          3.5  3.  4.5        ]
[ 5.66666667 1.33333333 4.33333333 2.33333333]
[ 9.33333333 5. 2. 3.66666667]
[ 1.6 5.00333333 1.33333333 1.73333333]]

请问,有人对如何使用 numpy.ma.masked_array 来存档此内容有一些提示吗?

最佳答案

问题是 np.array(d) 不会创建屏蔽数组。当列表 d 中的数组组装成更大的(非掩码)数组时,a 中的掩码会丢失。

解决这个问题的一种方法是替换它:

result = np.array(d).mean(axis=0)

result = masked_array(d).mean(axis=0)

例如:

In [27]: result = masked_array(d).mean(axis=0)

In [28]: result
Out[28]:
masked_array(data =
[[2.5 3.5 3.0 4.5]
[5.666666666666667 1.3333333333333333 4.333333333333333 2.3333333333333335]
[9.333333333333334 5.0 2.0 3.6666666666666665]
[1.5999999999999999 5.003333333333333 1.3333333333333333
1.7333333333333334]],
mask =
[[False False False False]
[False False False False]
[False False False False]
[False False False False]],
fill_value = 1e+20)

关于python - Numpy 数组均值函数在均值计算中未排除屏蔽元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31747880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com