Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3将元素识别为字符串_Python_Python 3.x - Fatal编程技术网

Python 3将元素识别为字符串

Python 3将元素识别为字符串,python,python-3.x,Python,Python 3.x,我定义了一个损失函数L(X,Y,c,b,d),其中X和Y应该是数组,c,b,d是浮点数。这是我的密码: def L(X,Y,c,b,d): error=0 a=Y[0] for i in range(len(X)): error = error + ((c*X[i]+(a/b)*np.sqrt(b**2-X[i]**2)+d)-Y[i])**2 return error 我要走了 "TypeError: unsupported operand t

我定义了一个损失函数
L(X,Y,c,b,d)
,其中X和Y应该是数组,c,b,d是浮点数。这是我的密码:

def L(X,Y,c,b,d):
    error=0
    a=Y[0]
    for i in range(len(X)):
        error = error + ((c*X[i]+(a/b)*np.sqrt(b**2-X[i]**2)+d)-Y[i])**2
    return error
我要走了

"TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'", 
这似乎意味着python将X[i]识别为字符串。我该怎么办

这是完整的代码,X是一列数字

def L(X,Y,c,b,d):
     error=0
     a=Y[0]
     for i in range(len(X)):
         error = error + ((c*X[i]+(a/b)*np.sqrt(b**2-X[i]**2)+d)-Y[i])**2
     return error               

def L_prime_c(X,Y,c,b,d):
    p=0
    for i in range(len(X)):
        p=p+2*L(X,Y,c,b,d)*X[i]
    return p
def L_prime_d(X,Y,c,b,d):
    r=0
    for i in range(len(X)):
        r=r+2*L(X,Y,c,b,d)
    return r
def fit(X,Y,learning_rate=1e-3,max_iter=20000,epsilon=1e-5):
    c=1
    b=1
    d=Y[0]
    for i in range(max_iter):
        gradient_c = L_prime_c(X,Y,c,b,d)
        c_new = c - learning_rate * gradient_c
        gradient_b = L_prime_b(X,Y,c,b,d)
        b_new = b - learning_rate * gradient_b
        gradient_d = L_prime_d(X,Y,c,b,d)
        d_new = d - learning_rate * gradient_d  
        if np.abs(c_new - c) < epsilon and np.abs(d_new - d) < epsilon and np.abs(b_new - b) < epsilon:
            break
        c=c_new
        b=b_new        
        d=d_new
    return np.array([c,b,d])

#getting X, Y
In = xlrd.open_workbook(r'C:\Users\gris_\Desktop\calculation4.xlsx')
isheet = In.sheet_by_name('Sheet1')
X=isheet.col_values(0)
Y=isheet.col_values(1)
a=Y[0]

#Calculation & Output
result=fit(X,Y,learning_rate=1e-3,max_iter=20000,epsilon=1e-5)    
定义L(X,Y,c,b,d): 错误=0 a=Y[0] 对于范围内的i(len(X)): 误差=误差+((c*X[i]+(a/b)*np.sqrt(b**2-X[i]**2)+d)-Y[i])**2 返回错误 定义L_素数c(X,Y,c,b,d): p=0 对于范围内的i(len(X)): p=p+2*L(X,Y,c,b,d)*X[i] 返回p 定义L_素数d(X,Y,c,b,d): r=0 对于范围内的i(len(X)): r=r+2*L(X,Y,c,b,d) 返回r def拟合(X,Y,学习率=1e-3,最大iter=20000,ε=1e-5): c=1 b=1 d=Y[0] 对于范围内的i(最大值): 梯度=素数(X,Y,c,b,d) c_new=c-学习率*梯度 梯度b=L素数b(X,Y,c,b,d) b_new=b-学习率*梯度 梯度d=L素数d(X,Y,c,b,d) d_new=d-学习率*梯度 如果np.abs(c_new-c)
问题解决:我有6个不同长度的列,所以当从一列中读取数据时,python实际上添加了这些“以使较短的列与最长的列长度相同。当我删除其他列时,情况会很好。非常感谢您的帮助!:D

看到您刚才添加的代码,尝试重写X,Y,如下所示:

X=list(map(float,isheet.col_values(0)))
Y=list(map(float,isheet.col_values(1)))
另一个:您的函数可以简化为所有错误的总和

import numpy as np

# Another way of writing it
#def L(X,Y,c,b,d):
#    error=0
#    a=Y[0]
#    for x,y in zip(X,Y):
#        error += ((c*x+(a/b)*np.sqrt(b**2-x**2)+d)-y)**2
#    return error

# Or even better:
def L(X,Y,c,b,d):
    a = Y[0]
    error = sum(((c*x+(a/b)*np.sqrt(b**2-x**2)+d)-y)**2 for x,y in zip(X,Y))
    return error

X = [2.2,2.2,3.2]
Y = [2.0,2.1,3.1]
c = 1
b = 20
d = 1

print(L(X,Y,c,b,d))
返回:
29.148285465180138

其中,将X和Y更改为:

X = [2.2,2.2,3.2,'a']
Y = [2.0,2.1,3.1,'b']

返回:
TypeError:**或pow()不支持的操作数类型:'str'和'int'

X包含什么?您有示例输入吗?我在定义此函数后导入X,它是一个浮点数组。我应该在定义此函数之前定义X吗?您应该确保您的
X
(和
Y
)列表只包含数字元素(或者至少包含支持算术操作数的元素),现在的情况是
X
包含Python所抱怨的字符串(即,在您的情况下,不知道如何将字符串提升到2的幂)。谢谢!这确实比我自己的代码简洁多了!我按照你说的修改了我的代码,但是我得到了“ValueError:无法将字符串转换为浮点”。所以我检查了我的excel工作簿,它实际上是一个49*1的数字矩阵…@GrisNX just print(X)不进行转换并将其发布到此处!这是一个伟大的举动!我不知道是什么导致了此问题,但这里是:[595.703,更多的数字我想我已经找到了答案:我有6个不同长度的列,所以当从一列中读取数据时,python实际上添加了这些“以使较短的列与最长的列具有相同的长度。当我删除其他列时,情况会很好。