【问题标题】:Numpy def problem: index 2 is out of bounds for axis 0 with size 2Numpy def 问题:索引 2 超出轴 0 的范围,大小为 2
【发布时间】:2020-07-24 11:22:13
【问题描述】:

谁能帮我修复这段代码以运行蒙特卡罗模拟:

def utility_function(r_list, f_list,
                    y_list = np.array([1,0.5,0.25]),
                    xi_list = np.array([0.02,0.04])):
    U = y_list[0] + f_list[1] * (xi_list[0] - r_list[1])*(y_list[0] -y_list[1]) + f_list[2]*(y_list[0]*(xi_list[0] - r_list[2]) +y_list[1]*xi_list[2]+ y_list[3]*(r_list[2]  - xi_list[0]- xi_list[1]))

    return U

Python output

【问题讨论】:

  • 请将完整的错误消息/回溯以文本形式编辑到您的问题中。
  • 除非你知道会发生什么,否则使用可变的默认参数值通常是一个非常糟糕的主意,因为意外的副作用。该值仅计算一次,如果在函数体中对其进行了修改,那么对于所有后续调用,该值也会更改。
  • 一种非常简单的调试技术是打印用于计算 U 的每个值 - 导致错误的值将变得明显。你试过这个吗?
  • 只是为了扩展@barny 的评论,你要做的是有一些不可变的默认值,它本身不是一个有效的输入(通常是None),并且靠近开始函数的代码,测试参数是否有这个值,如果有,使用你想要使用的可变对象的表达式分配给它(然后将创建一个新的可变对象)。
  • 这是一个简单的越界情况,因为它是...assert 在进行计算之前数组的大小(如果边界不符合要求,则返回 -1)

标签: python numpy


【解决方案1】:

有很多事情你应该更正,但是由于这个而引发了错误:

  • 您有一个默认参数 xi,它有 2 个值,但您正在访问函数中的第三个 (xi[2])。

此外,您正在访问 y_list 的元素 3,它只有 3 个元素长,所以这会给您下一个错误 (y_list[3])。

【讨论】:

  • @Prachi 如果问题得到解决,您介意关闭问题吗?谢谢
猜你喜欢
  • 2020-11-22
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
相关资源
最近更新 更多