我必须检查一个向量的特定段,让我们说从第8000个到最后一个的元素大于某个实数。由于我是Python中的菜鸟,我尝试了以下内容:
if (vec[8000:Nout-1] > 2.):
print('test ok!')
我将vec声明为vec = np.zeros(Nout)
Nout==10000
。因此,我填充了向量,在计算之后,我的数字就在其中。
我收到的错误是:
The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我不知道是否或如何使用a.any
。
答案 0 :(得分:1)
你想这样使用它:
Nout = 10000
vec = np.zeros(Nout)
if (vec[8000:Nout-1].all() > 2):
print('test ok!')
这将检查8000
中索引Nout-1
到vec
的所有元素是否大于2.
答案 1 :(得分:1)
要了解此问题,请尝试查看(vec[8000:Nout-1] > 2.)
的输出。让我简单介绍一下你的例子
vec = np.array([1, 2, 3, 4])
print vec > 2
[False, False, True, True]
因此它给出了一个数组,其结果应用于列表的每个元素。因此,当您在此调用时,您会收到给定的错误消息,即数组的真值是不明确的。
正如它所暗示的那样,这可以通过使用
来解决
import numpy as np
if np.all(vec > 2):
print('test ok')
要么
import numpy as np
if (vec > 2).all():
print('test ok')
我个人更喜欢第一个实现,因为它表明这是一个numpy函数,但每个都是他们自己的。
numpy中这种行为的合理性是对数组的某些部分执行操作,即
vec = np.array([1, 2, 3, 4])
vec[vec > 2] = 0
print vec
[1, 2, 0, 0]