python - 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 ?
预先感谢您的建议
解决方案
您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,具体取决于您想要什么。
推荐阅读
- ethereum - 将 Solidity 中的交易保持在 gas 限制范围内
- python - 如何删除 jupyter notebook 中我的数据描述中显示的尾随零
- java - 在折线上绘制一个点朝向或远离端点(纬度经度)
- go - 当值类型为 reflect.Ptr 时,如何使用 reflect.FieldByName
- performance - 如何在不影响性能的情况下获取 App Engine 数据存储区查询中每个实体的光标?
- sql-server - 向 S3 存储桶所有者授予读取权限以跨 AWS 账户进行本机备份
- javascript - 我可以在 Android 设备上本地使用 node.js 吗?
- r - R 正则表达式:使用带有 'Å' 与 'A' 字符的 \\b
- ruby-on-rails - 使用 Puma 部署在 Elastic Beanstalk 上的 Rails 应用程序失败 - 502 Bad Gateway
- python-3.x - Python Requests.Get - 给出无效的架构错误