问题描述
我想计算掩码数组数组的中位数。计算均值没问题,但是当我想计算中位数时错误增加,我不知道为什么:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
这是重现问题的最小示例:
import numpy as np
import numpy.mask as ma
test = ma.masked_array([[1,2,3,4],[5,6,7,8]],mask = [[False,False,False],[False,False]])
test_tot= np.zeros(4,dtype='object')
test_tot[0]=test
test_tot[1]=test
test_tot[2]=test
test_tot[3]=test
np.mean(test_tot) # OK
np.median(test_tot) # PROBLEM ?
提前感谢您的建议
解决方法
您的 test_tot
数组是 2D 数组的一维数组,而不是 3D 数组。
因此,在尝试找到中位数时,您要求解释器对“这个二维数组比另一个二维数组大吗?”的形式进行一系列比较。口译员回答说“‘更大’是什么意思?我不知道如何比较两个这样的物体的绝对大小”
如果您使用的是 3D 数组,则可以指定要沿哪个轴进行中位数(或不指定任何内容,在这种情况下 numpy 将计算展平数组的中位数并为您提供):
import numpy as np
import numpy.mask as ma
test = ma.masked_array([[1,2,3,4],[5,6,7,8]],mask = [[False,False,False],[False,False]])
test_tot= np.array([test,test,test])
然后您可以要求中位数,指定轴 = 无、0、1 或 2,具体取决于您想要什么。