热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

掩码数组的PythonIndexError

我已将数据格式化为3维数组,并且我正在沿着一个轴对每个元素执行回归。以下

我已将数据格式化为3维数组,并且我正在沿着一个轴对每个元素执行回归。以下代码按我的预期工作,并返回回归斜率的列表。

import numpy as np
from scipy import stats
import numpy.ma as ma
#make array
np.random.seed(0)
array = np.random.random((4,3,2))
def regress_slope(array):
N=array.shape[0]
alpha=0.9
y = array[:,:,1]
x = array[:,0]
result = [stats.mstats.theilslopes(y[i,...],x[i,alpha)[0] for i in range(0,N)]
return result
result = regress_slope(array)
list(result)
print(result)

我的“真实”数据包含无效值,并且我已经定义了阈值(

array2 = ma.masked_less_equal(array,0.1)
result2 = regress_slope(array2)
list(result2)
IndexError: index 0 is out of bounds for axis 0 with size 0

我不确定此错误消息的含义,但是我认为这可能是因为没有足够的未屏蔽值来计算回归吗?如果是这种情况,如何调整代码以返回结果中的nan?


您是正确的,如果没有足够的未屏蔽值来计算回归,函数stats.mstats.theilslopes将失败并显示错误消息。

一个最小的例子:

# this works
a = ma.masked_array([1,2],mask=[0,0])
b = ma.masked_array([1,0])
stats.mstats.theilslopes(a,b,0.95)
# but this does not
b = ma.masked_array([1,1])
stats.mstats.theilslopes(a,0.95)

错误消息表明,在计算过程中的某个位置,它试图访问没有元素的结果的第1轴上的第1个元素。

我对您要尝试做的事情的理论了解不足,以了解结果是否有用,但这将解决您的紧迫问题:

import numpy as np
from scipy import stats
import numpy.ma as ma
np.random.seed(0)
a = np.random.random((4,3,2))
def regress_slope(arr):
def safe_first_theilslopes(arr1,arr2,a):
try:
return stats.mstats.theilslopes(arr1,a)[0]
except IndexError:
return np.NaN
n = arr.shape[0]
alpha = 0.9
y = arr[:,:,1]
x = arr[:,0]
return [safe_first_theilslopes(y[i,...],x[i,alpha) for i in range(0,n)]
result = regress_slope(a)
print(result)
a2 = ma.masked_less_equal(a,0.1)
result2 = regress_slope(a2)
print(result2)

请注意,我如何让函数返回函数结果的第一个元素(stats.mstats.theilslopes(arr1,a)[0]np.NaN,以便现在将其烘焙到该函数中。

此代码有效,但是会引发一些警告,您可以取消警告,但应该首先考虑一下:

RuntimeWarning: Mean of empty slice.
out=out,**kwargs)
\lib\site-packages\numpy\core\_methods.py:161: RuntimeWarning: invalid value encountered in double_scalars
ret = ret.dtype.type(ret / rcount)

推荐阅读
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 目录预备知识导包构建数据集神经网络结构训练测试精度可视化计算模型精度损失可视化输出网络结构信息训练神经网络定义参数载入数据载入神经网络结构、损失及优化训练及测试损失、精度可视化qu ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 如何将Python与Excel高效结合:常用操作技巧解析
    本文深入探讨了如何将Python与Excel高效结合,涵盖了一系列实用的操作技巧。文章内容详尽,步骤清晰,注重细节处理,旨在帮助读者掌握Python与Excel之间的无缝对接方法,提升数据处理效率。 ... [详细]
  • 每年,意甲、德甲、英超和西甲等各大足球联赛的赛程表都是球迷们关注的焦点。本文通过 Python 编程实现了一种生成赛程表的方法,该方法基于蛇形环算法。具体而言,将所有球队排列成两列的环形结构,左侧球队对阵右侧球队,首支队伍固定不动,其余队伍按顺时针方向循环移动,从而确保每场比赛不重复。此算法不仅高效,而且易于实现,为赛程安排提供了可靠的解决方案。 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • LeetCode 实战:寻找三数之和为零的组合
    给定一个包含 n 个整数的数组,判断该数组中是否存在三个元素 a、b、c,使得 a + b + c = 0。找出所有满足条件且不重复的三元组。 ... [详细]
  • 本文介绍了 Python 中的基本数据类型,包括不可变数据类型(数字、字符串、元组)和可变数据类型(列表、字典、集合),并详细解释了每种数据类型的使用方法和常见操作。 ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
  • 使用Python代码高效生成大规模随机数据集(千万级) ... [详细]
  • 分享一款基于Java开发的经典贪吃蛇游戏实现
    本文介绍了一款使用Java语言开发的经典贪吃蛇游戏的实现。游戏主要由两个核心类组成:`GameFrame` 和 `GamePanel`。`GameFrame` 类负责设置游戏窗口的标题、关闭按钮以及是否允许调整窗口大小,并初始化数据模型以支持绘制操作。`GamePanel` 类则负责管理游戏中的蛇和苹果的逻辑与渲染,确保游戏的流畅运行和良好的用户体验。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
author-avatar
手机用户2602921813
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有