python – `numpy.mean`与元组一起用作`axis`参数:不使用屏蔽数组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – `numpy.mean`与元组一起用作`axis`参数:不使用屏蔽数组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1980字,纯文字阅读大概需要3分钟。
内容图文
![python – `numpy.mean`与元组一起用作`axis`参数:不使用屏蔽数组](/upload/InfoBanner/zyjiaocheng/824/05d40738412042caacf961a4c9c6764f.jpg)
我有一个简单的3D数组a1,以及它的掩码模拟a2:
import numpy
a1 = numpy.array([[[ 0.00, 0.00, 0.00],
[ 0.88, 0.80, 0.78],
[ 0.75, 0.78, 0.77]],
[[ 0.00, 0.00, 0.00],
[ 3.29, 3.29, 3.30],
[ 3.27, 3.27, 3.26]],
[[ 0.00, 0.00, 0.00],
[ 0.41, 0.42, 0.40],
[ 0.42, 0.43, 0.41]]])
a2 = numpy.ma.masked_equal(a1, 0.)
我想一次沿着几个轴执行这个数组的平均值(这是numpy.mean中一个特殊的,未记录的轴参数使用,例如参见here):
numpy.mean(a1, axis=(0, 1))
这与a1工作正常,但我得到掩码数组a2的以下错误:
TypeError: tuple indices must be integers, not tuple
我使用屏蔽版本numpy.ma.mean(a2,axis =(0,1))得到相同的错误,或者如果我通过a2 [a2.mask] = 0取消屏蔽数组.
我在numpy.mean中使用了一个元组作为axis参数,因为它实际上并不是硬编码的(此命令应用于具有潜在不同维数的数组,根据该数组调整元组).
numpy版本1.9.1和1.9.2遇到问题.
解决方法:
对于MaskedArray参数,numpy.mean调用MaskedArray.mean,它不支持元组轴参数.您可以通过在支持轴元组的操作方面重新实现MaskedArray.mean来获得正确的行为:
def mean(a, axis=None):
if a.mask is numpy.ma.nomask:
return super(numpy.ma.MaskedArray, a).mean(axis=axis)
counts = numpy.logical_not(a.mask).sum(axis=axis)
if counts.shape:
sums = a.filled(0).sum(axis=axis)
mask = (counts == 0)
return numpy.ma.MaskedArray(data=sums * 1. / counts, mask=mask, copy=False)
elif counts:
# Return scalar, not array
return a.filled(0).sum(axis=axis) * 1. / counts
else:
# Masked scalar
return numpy.ma.masked
或者,如果你愿意依赖于使用元组轴的MaskedArray.sum(考虑到你正在使用numpy.mean的未记录行为,你可能会这样做),
def mean(a, axis=None):
if a.mask is numpy.ma.nomask:
return super(numpy.ma.MaskedArray, a).mean(axis=axis)
sums = a2.sum(axis=axis)
counts = numpy.logical_not(a.mask).sum(axis=axis)
result = sums * 1. / counts
我们依靠MaskedArray.sum来处理掩码.
我只是轻轻地测试了这些功能;在使用它们之前,确保它们确实有效,并编写一些测试.例如,如果输出是0维并且没有屏蔽值,则输出是0D MaskedArray还是标量取决于输入掩码是否为nomask还是全部为False的数组.这与默认的MaskedArray.mean行为相同,但可能不是您想要的;我怀疑默认行为是一个错误.
内容总结
以上是互联网集市为您收集整理的python – `numpy.mean`与元组一起用作`axis`参数:不使用屏蔽数组全部内容,希望文章能够帮你解决python – `numpy.mean`与元组一起用作`axis`参数:不使用屏蔽数组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。