如何计算Numpy数组中某个范围内的值? (不起作用)

时间:2016-08-09 18:53:11

标签: python arrays numpy

我已经检查了这个帖子How to count values in a certain range in a Numpy array?,但他们的答案似乎不起作用。

我有一个2000个浮点数的数组:数据:

print(type(data)) --> <type 'list'>
print(type(data[0])) --> <type 'numpy.float64'>

我有2个变量来形成范围,minV和maxV:

print(type(minV)) --> <type 'float'>
print(type(maxV)) --> <type 'float'>

如果我尝试上述链接中给出的解决方案,我会收到此异常:

((minV < data) & (data < maxV)).sum()

AttributeError: 'bool' object has no attribute 'sum'

实际上,该表达式是一个布尔值:

print(type( (minV < data) & (data < minV) ) ) --> <type 'bool'>
print( ( (minV < data) & (data < minV) ) ) --> True

我使用的python版本是Python 2.7.3 - EPD 7.3-2(64位) Numpy版本是1.6.1

系统是Linux(虽然我忽略了这一点很重要)。

感谢。

2 个答案:

答案 0 :(得分:1)

我怀疑你使用的是python 2,因为在你的情况下比较一个列表和一个数字不会引发TypeError

但是为了使用逐元素比较(<>&),您需要将列表转换为numpy数组:

import numpy as np
data = np.array(data)
((minV < data) & (data < maxV)).sum()

应该有效。例如:

data = list(range(1000))
minV = 100
maxV = 500
data = np.array(data)
((minV < data) & (data < maxV)).sum() # returns 399

答案 1 :(得分:0)

似乎data不是数组。请检查一下。建议的解决方案适用于数组。也许在某些时候data变成了一个数字或其他东西。