----最后更新---- 变量' mtindex'的变量定义。有一个逗号而不是一个点导致python为真值条件返回两个值。
----更新了问题----
在for循环中运行if语句时出错。
我的for循环首先定义了两个变量' pctchange'和' pctchangeindex'作为基于从数据帧中提取的值的整数。因此,这些被定义为循环运行的每个x值的新值。然后,我将这两者之间的差异与此循环外定义的另一个变量(整数)进行比较。我通过在for循环中运行的if语句来执行此操作 - 以便对于我的两个循环变量的每个新值赋值,如果条件被测试:
for x in range(1,numdays-holdperiod1):
pctchange = (int taken from dataframe)
pctchangeindex = (int taken from dataframe)
if ((pctchange - pctchangeindex) > mtindex and x-1 not in
positioncheck1) :
calculate some things
运行此命令时,带有if语句的行会给出错误消息:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我还没能解决这个问题。我测试的是,当我删除if语句的第二部分时,我得到了同样的错误 - 所以它不应该是'和'那就是错误。我希望,因为if语句相对于for循环缩进,所以它为for循环中的变量的每个新赋值运行?我希望这次我的问题更清楚,我得到了一些回应,因为这个问题已经让我停了好几个月了。
----老问题---- 我在函数定义中有一个带有两个条件的if语句。引发错误的部分是:
if (pctchange - pctchangeindex > mtindex and x-1 not in positioncheck1) :
我在Pycharm中得到了确切的错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我已经看到其他线程描述了相同的错误,并说它是由numpy解释数组引起的。 if条件的第二部分检查给定值是否在' positioncheck1' - 这是一个标准的python列表。
答案 0 :(得分:1)
这可能有效:
if ((pctchange - pctchangeindex > mtindex).all() and x-1 not in positioncheck1)
有两个问题。
运营商订单。将{()放在>
左右,以便首先评估它。
多个布尔值。作用于数组的>
创建一个带有布尔值的数组。那些含糊不清的'在标量Python上下文中使用时(and
和if
)。我添加了all
(或any
)以将这些值压缩为一个。
多个ValueError
SO问题都处理了这个问题的一些变化 - 在标量Python上下文中使用了一个布尔数组。
以下是一些示例案例:
In [416]: np.arange(10)>6 | True
Out[416]: array([False, False, False, False, False, False, False, False, True, True], dtype=bool)
In [417]: (np.arange(10)>6) | True
Out[417]: array([ True, True, True, True, True, True, True, True, True, True], dtype=bool)
如果没有()
,则会在|
>
使用and
时,布尔数组必须先缩减为标量
In [418]: np.arange(10)>6 and True
...
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
In [419]: (np.arange(10)>6) and True
...
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
In [420]: (np.arange(10)>6).all() and True
Out[420]: False
答案 1 :(得分:0)
我终于找到了为什么返回了模糊真值的错误。 int类型的变量mtindex
用逗号而不是点表示 - 这使得python将其解释为2个单独的值,从而给出两个真值语句。
感谢您的投入。