我尝试使用数组和if语句的组合。我检查两个不同的一维数组中的两个元素是否返回True。(我已经做到了这一点)然后我尝试将True / False传递到if语句中--但针对数组中的每个结果(不是全部,也不是任何一个)。我不知道如何构建我尝试创建的if语句。
下面的代码就是我要传递给if语句的代码,当单独打印时,它会像我相信的那样工作,返回一个布尔数组。
l0,l1,l2,l3是数字数组,我分别检查了它们的输出
test = np.array(np.greater_equal(l0,l1))
print(test)
[[False]
[False]
[False]
[False]
[False]
[False]
[False]
[False]
[False]
[False]
[False]
[ True]
[ True]
[ True]
[ True]
[ True]
. . . . continues
当我尝试在一个普通的If语句中使用数组的输出时,我遇到了一个错误,它引用了歧义。我并不想在数组中的“所有”或“任何”元素彼此〉=时返回true,我想一次检查一个元素,并在这两种情况下按照下面的方式赋值变量。
test = np.array(np.greater_equal(l0,l1))
if test:
cu1 = l0 - l1
cd1 = 0
else:
cd1 = l1 - l0
cu1 = 0
Error: ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我可以将索引位置传递到if语句中,并使用生成的变量赋值执行进一步的计算,对此有什么想法吗?
如果有帮助的话,我正在使用的内容的完整上下文
if np.array(np.greater_equal(l0,l1)):
cu1 = l0 - l1
cd1 = 0
else:
cd1 = l1 - l0
cu1 = 0
if np.array(np.greater_equal(l1,l2)):
cu2 = cu1 + l1 - l2
cd2 = cd1
else:
cd2 = cd1 + l2 - l1
cu2 = cu1
if np.array(np.greater_equal(l2,l3)):
cu = cu2 + l2 - l3
cd = cd2
else:
cu = cu2
cd = cd2 + l3 - l2
if np.array(np.not_equal(np.sum(cu + cd),0)):
x = cu / (cu + cd)
else:
x = 0
x = np.array(x)
1条答案
按热度按时间dtcbnfnu1#
大家好,欢迎来到Python社区。
不幸的是,python内置的
if
只能同时检查一个True
或False
,因此不可能以您的方式使用if
构造,除非您决定分别迭代每个元素。幸运的是,您的问题经常出现,
numpy
为这个问题提供了一个函数:np.where
。下面是一个如何使用它的示例:
这相当于你的第一个例子(虽然有错误)。我添加了两个
np.where
语句,因为你有两个数组,你想在每个if
中计算。在你的语言中,一个out = np.where(conditions, value_if_true, value_if_false)
应该是这样的:最后,(如果这是不请自来的建议,请道歉),我发现
numpy
在很多时候都比我早一步。例如,在第一个示例中,您可以使用下限0来限制l0 - l1
,而不是根据l0
是否大于l1
来选择l0 - l1
和0。看一下np.clip
,或者在您的情况下,np.maximum
就可以做到这一点: