TypeError: only length-1 arrays can be converted to Python scalars Dot Product

岁酱吖の 提交于 2019-12-13 22:08:18

问题


Writing this algorithm for my final year project. Debugged a few, but stuck on this. Tried changing the float method but nothing really changed.

----> 8         hypothesis = np.dot(float(x), theta)
TypeError: only length-1 arrays can be converted to Python scalars

Entire code -

import numpy as np
import random
import pandas as pd

def gradientDescent(x, y, theta, alpha, m, numIterations):
    xTrans = x.transpose()
    for i in range(0, numIterations):
        hypothesis = np.dot(x, theta)
        loss = hypothesis - y
        # avg cost per example (the 2 in 2*m doesn't really matter here.
        # But to be consistent with the gradient, I include it)
        cost = np.sum(loss ** 2) / (2 * m)
        print("Iteration %d | Cost: %f" % (i, cost))
        # avg gradient per example
        gradient = np.dot(xTrans, loss) / m
        # update
        theta = theta - alpha * gradient
    return theta

df = pd.read_csv(r'C:\Users\WELCOME\Desktop\FinalYearPaper\ConferencePaper\NewTrain.csv', 'rU', delimiter=",",header=None)

x = df.loc[:,'0':'2'].as_matrix()
y = df[3].as_matrix()

print(x)
print(y)

m, n = np.shape(x)
numIterations= 100
alpha = 0.001
theta = np.ones(n)
theta = gradientDescent(x, y, theta, alpha, m, numIterations)
print(theta)

回答1:


x is a numpy array, which Python's builtin float function can't handle. Try:

hypothesis = np.dot(x.astype(float), theta)


来源:https://stackoverflow.com/questions/49658448/typeerror-only-length-1-arrays-can-be-converted-to-python-scalars-dot-product

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!