Вычитание массивов в Python - PullRequest
0 голосов
/ 28 июня 2018

Это мой код для реализации линейной регрессии: Но я хочу изменить последние 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 голосов
/ 28 июня 2018

Вместо использования 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]

или используйте лямбду просто для удовольствия:

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]

Рабочий пример

0 голосов
/ 28 июня 2018

Ошибка подразумевает, что по крайней мере один из массивов имеет тип "объект" Это может быть вызвано «mydata», если он содержит какие-либо строки. Вы должны удалить все строки из массивов, для которых вы хотите использовать операцию matmul. после этого вам нужно преобразовать их в тип float, вызвав .astype (float). После этого matmul должен работать как положено.

надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...