Python中的数组减法

时间:2018-06-28 08:34:04

标签: python numpy

这是我实现线性回归的代码: 但我想将最后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]

最诚挚的问候

2 个答案:

答案 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]

Working example