我有一个由两个函数组成的代码,一个用于读取数据,另一个用于计算数据。两个函数在单独运行时运行正常,但是当我尝试让计数器调用文件阅读器时,我收到错误。如果有人可以告诉我在哪里搞砸,我将不胜感激。提前致谢
错误
File "C:\Documents and Settings\Read_File.py", line 50, in counter
Sx = ((25. < Xa) & (Xa < 100.)).sum() #count what is in x range
TypeError: unorderable types: float() < function()
代码
for line in f: #Loop Strips empty lines as well as replaces tabs with space
if line !='':
line = line.strip()
line = line.replace('\t',' ')
columns = line.split()
for line in range(N): #Loop number of lines to be counted
x = columns[8] # assigns variable to columns
y = columns[18]
z = columns[19]
#vx = columns[]
#vy = columns[]
#vz = columns[]
X.append(x)
Y.append(y) #appends data in list
Z.append(z)
Xa = numpy.array(X, dtype=float) #Converts lists to NumPy arrays
Ya = numpy.array(Y, dtype=float)
Za = numpy.array(Z, dtype=float)
return(Xa,Ya,Za) #returns arrays/print statement to test
def counter(Xa):
Sx = ((25. < Xa) & (Xa < 100.)).sum() #count what is in x range
Sy = ((25. < Ya) & (Ya < 100.)).sum() #count what is in y range
Sz = ((25. < Za) & (Za < 100.)).sum() #count what is in z range
return(print(Sx,Sy,Sz))
read_file(F) #function calls
counter(read_file)
修改
在列夫和詹姆斯的帮助下,第一个问题得到解决,现在我得到了这个错误
Sx = ((2. < Xa) & (Xa < 10.)).sum() #count what is in x range
TypeError: unorderable types: float() < tuple()
这是因为数组中的逗号吗?如果是这样,我怎么能解决这个问题?
答案 0 :(得分:2)
您正试图在函数counter()
上调用read_file()
,而不是调用read_file(F)
的结果。您没有包含read_file()
的来源,但您几乎肯定想要这样做:
counter(readfile(F))
而不是最后两行。 (顺便说一下,result(print(...))
中的counter()
可能不需要return
包围其余部分。)
答案 1 :(得分:1)
下面:
Sx = sum(item for item in Xa if 25. < item < 100.)
......依此类推。
基本上,您正在遍历Xa
中的每个项目,并省略那些不属于该范围的项目。然后你要总结它们。
P上。 S.您收到错误,因为float()和tuple()类型没有定义的比较函数。