首页 > 解决方案 > np.median error on array of masked array ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

问题描述

我想计算一个掩码数组的中位数。计算平均值没有问题,但是当我想计算中位数时错误上升,我不知道为什么:

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,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 ?

预先感谢您的建议

标签: pythonarrayspython-3.xmasked-array

解决方案


test_tot的数组是 2D 数组的 1D 数组,而不是 3D 数组。

因此,在尝试找到中位数时,您要求解释器进行一系列比较,形式为“这个 2D 数组是否比其他 2D 数组大?”。口译员回答“你说的‘更大’是什么意思?我不知道如何比较两个这样的物体的绝对大小”

如果您使用的是 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,False,False,False]])

test_tot= np.array([test,test,test,test])

然后您可以要求中位数,指定轴 = 无、0、1 或 2,具体取决于您想要什么。


推荐阅读