2016-08-04 47 views
0

这已经所以道歉之前,要求再次询问,我已按照theseanswersthis提供建议的解决方案,但I'cant似乎删除我的错误。Python的类型错误在numpy的polyfit ufunc不包含循环相匹配的签名类型

我试过改变对象类型的斜率列表和vals范围,但仍然出现错误。我躲进了polynomial.py脚本,但我不明白错误中列出的代码行。

总的来说,我试图根据灰度值(0-255)将8位灰度图像分离成单个数组,然后使用每个值的最佳拟合线,然后使用每条斜线最适合获得最适合图像的整体线条。

这里是我的代码:

image = Image.open('subfram-002.tif') 
im_array = np.array(image) 
#print(im_array) 
#### 
multivec = [] 
#### 
# For loop to calculate the line of best fit for each value in the sub-frame array 
arrays = [im_array] # Calling our array 
vals = list(range(255)) # Range of values in array 
slopes = [] # List to append each of the slopes of the line of best fit 
skip = False 
for i in arrays: 
    for j in vals: 
     index = list(zip(*np.where (j == i))) # Creating a list of the position indices for each value in the array 
     in_array = np.array(index) # Updating list to array, not needed will remove 

     a = list([int(i[0]) for i in index]) # Getting the first element of each tuple in the index list 
     b = list([int(i[1]) for i in index]) # Getting the second element of each tuple in the index list 
     # Add exception for vectors that are not generated due to values in 0-255 not being present 
     if len(a) == 0: 
      skip = True 
     elif len(b) == 0: 
      skip = True 
     else: 
      vec = list((np.poly1d(np.polyfit(a,b,1))).c) # Calculating list of best (1st order polynomial, consider increasing the order?) 
      slope = float(vec[0]) # Getting the 1st coefficient of the line of best fit, which is the slope 
      slopes.append(slope) # appending each slope to a list of slopes 

print(type(slopes), type(vals)) 

slopes += ['0'] * (255 - len(slopes)) # Padding slope list in case less then 255 slopes generated 

print(len(vals)) 

# Take in all of the slopes from each vector that is determined for each value 
vec1 = (np.poly1d(np.polyfit(slopes,vals,1))).C# Determining the overall line of best fit for the array, using the slope of the vector as the comparator between sub-frames 

这里是我的错误:

<class 'list'> <class 'list'> 
255 
Traceback (most recent call last): 
    File "aryslop.py", line 53, in <module> 
    vec1 = (np.poly1d(np.polyfit(slopes1,vals1,1))).C# Determining the overall line of best fit for the array, using the slope of the vector as the comparator between sub-frames 
    File "/home/vanoccupanther/anaconda3/lib/python3.5/site-packages/numpy/lib/polynomial.py", line 549, in polyfit 
    x = NX.asarray(x) + 0.0 
TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('<U32') dtype('<U32') dtype('<U32') 

回答

1

我解决了这个(我希望),我通过迭代通过每个丘壑的范围和斜坡列表中创建新的列表,将每个包含在每个对象中的对象变成浮动。我已经在我的for循环中完成了,所以我应该早点完成。