元素范围变成向量?

时间:2016-12-18 21:09:19

标签: python numpy

我必须检查一个向量的特定段,让我们说从第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

2 个答案:

答案 0 :(得分:1)

你想这样使用它:

Nout = 10000
vec = np.zeros(Nout)

if (vec[8000:Nout-1].all() > 2):
    print('test ok!')

这将检查8000中索引Nout-1vec的所有元素是否大于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]