【问题标题】:"The truth value of an array with more than one element is ambiguous" in pythonpython中的“具有多个元素的数组的真值不明确”
【发布时间】:2020-08-11 16:15:05
【问题描述】:

这就是我为我的函数获得两个数组(数组 1 和数组 2)的方式:

x = np.arange(-5, 5,0.01)
prob=stats.norm.pdf(x,0,1)
prob_array=numpy.array(prob).reshape(1000,1) #array1
x_tran=m.transpose()
x_tran_array=array(x_tran)
mu_array=array(mu)           # mu is stock return 
mu_array1=numpy.array(mu_array).reshape(54966,1)
sigma_array=array(sigma)     #sigma is the historical volatility
sigma_array1=numpy.array(sigma_array).reshape(54966,1)
mu1_mat=mat(ones((1,1000)))  #for matrix calculation
original_x=mu_array1*mu1_mat+sigma_array1*x_tran_array #array2

我定义了一个函数:

def TK_value(z,p):
    if z >= 0:
        utility=z**0.88
        prob=(p**0.61)/(p**0.61+(1-p)**0.61)**(1/0.61)
    else:
        utility= -2.25*(-z)**0.88
        prob=(p**0.69)/(p**0.69+(1-p)**0.69)**(1/0.69)
    return utility*prob


tks=TK_value(original_x,prob_array)

我有两个带有 original_x 形状的数组((54966, 1000) 和形状为 (1000,1) 的 prob_array。我想在这个函数中使用 original_x 作为 z 和 prob_array 作为 p。

但错误是:

ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

【问题讨论】:

  • z 是一个数组吗?
  • 你是如何调用函数的,你向z提供了什么数据,你确定你真的提供了你认为的数据吗?错误似乎是为了比较if z>=0: 而显然此时z 是一个包含多个元素的数组。
  • 您应该将完整的错误消息粘贴到它所引用的代码行中,但我怀疑问题出在if z>=0: 行中。 -2.25(-z) 位也会出现问题(浮点数不可调用),因为您可能错过了预期的 * 运算符。
  • @nancyyin 你在使用 Numpy,不是吗?如果是,则应在问题中提及(并标记为这样)。

标签: python function numpy


【解决方案1】:

欢迎来到 SO!问题似乎是这一行:if z >= 0: 如果您在数组上使用 '>'/'

>>> import numpy as np
>>> a = np.array([1,2,3])
>>> a > 2
array([False, False,  True])

默认情况下,该数组无法转换为 bool,您必须更具体,例如使用 any() 来测试是否至少一个元素属于给定条件。 Numpy 数组可以这样做:https://numpy.org/doc/stable/reference/generated/numpy.ndarray.any.html.

【讨论】:

    猜你喜欢
    • 2019-03-19
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2021-07-06
    • 2015-01-06
    • 1970-01-01
    相关资源
    最近更新 更多