【问题标题】:Numpy array mean function did not exclude masked element in mean computationNumpy 数组均值函数在均值计算中不排除屏蔽元素
【发布时间】:2015-07-31 13:52:06
【问题描述】:

我是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 进行存档有一些提示吗?

【问题讨论】:

  • 这不是问题的一部分,但你可以写 d = [a,b,c] 而不是追加。

标签: python arrays numpy


【解决方案1】:

问题是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)

【讨论】:

  • 非常感谢@Warren Weckesser。这非常适合这种情况。
猜你喜欢
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 2020-07-26
  • 1970-01-01
相关资源
最近更新 更多