Numpy polyfit ufunc中的Python TypeError不包含具有匹配签名类型的循环

时间:2016-08-04 12:19:36

标签: python numpy

之前有人问过这样的问题再次提出来,我已经按照these answersthis中提供的建议解决方案进行了处理,但我似乎无法删除我的错误。

我尝试更改斜率列表和值范围的对象类型,但仍然得到错误。我躲进了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 个答案:

答案 0 :(得分:1)

我解决了这个问题(我希望),我通过迭代每个vals范围和斜率列表来创建新列表,将每个包含的每个对象都转换为浮点数。我已经在我的for循环中完成了所以我应该早点完成。