这是我实现线性回归的代码: 但我想将最后4行更改为数组减法(如注释行所示),我遇到此错误:
File "D:/Machine Learning/hw1/hw1-b.py", line 19, in <module>
gbase = np.matmul(data, cobase) # h(x)-y matrix
TypeError: Object arrays are not currently supported
我希望收到您的来信
import csv
import numpy as np
from numpy import genfromtxt
my_data = genfromtxt('C:\Users\Naghme\Desktop\HW1-Data\Data\house2.csv', delimiter=',')
my_data = np.delete(my_data, (0), axis=0)
m=150
z0=0
z1=0
z2=0
z3=0
t=np.zeros((4,1))
a=0.000001
ones=np.ones((150,1))
data=np.append(ones,my_data, axis=1)
for i in range(1,10000):
cobase = np.append(t,np.array([-1]))
gbase = np.matmul(data, cobase) # h(x)-y matrix
# sigma
z0 = np.matmul(gbase.transpose(), np.ones((150, 1)))
z1 = np.matmul(gbase.transpose(), my_data[:, 0])
z2 = np.matmul(gbase.transpose(), my_data[:, 1])
z3 = np.matmul(gbase.transpose(), my_data[:, 2])
z = np.array([z0, z1, z2, z3])
#delta
d =np.array( (1.0 / m) * z)
#t= np.subtract(t,a*d)
t[0] = t[0] - a * d[0]
t[1] = t[1] - a * d[1]
t[2] = t[2] - a * d[2]
t[3] = t[3] - a * d[3]
最诚挚的问候
答案 0 :(得分:0)
该错误表示至少一个数组的类型为“对象” 如果它包含任何字符串,则可能是由“ mydata”引起的。 您应该从使用matmul操作所需的数组中删除所有字符串。之后,您需要通过调用.astype(float)将它们转换为float类型。之后,mulmul应该会按预期工作。
希望这会对您有所帮助。
答案 1 :(得分:0)
代替使用numpy,您可以自己进行列表理解!
a = 10
d = [10, 20, 30, 40]
t = [1, 2, 3, 4]
t = [v - a * d[i] for i, v in enumerate(t)]
print(t) # [-99, -198, -297, -396]
或者只是为了娱乐而使用lambda:
my_substract = lambda v, a, i,: v - a * i
t = [my_substract(v, a, d[i]) for i, v in enumerate(t)]
print(t) # [-99, -198, -297, -396]