我已经检查了这个帖子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(虽然我忽略了这一点很重要)。
感谢。
答案 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
变成了一个数字或其他东西。