Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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 ValueError:形状(20,1)和(2,1)未对齐:1(尺寸1)!=2(尺寸0)_Python_Python 3.x_Numpy_Matrix Multiplication_Valueerror - Fatal编程技术网

Python ValueError:形状(20,1)和(2,1)未对齐:1(尺寸1)!=2(尺寸0)

Python ValueError:形状(20,1)和(2,1)未对齐:1(尺寸1)!=2(尺寸0),python,python-3.x,numpy,matrix-multiplication,valueerror,Python,Python 3.x,Numpy,Matrix Multiplication,Valueerror,我对机器学习有点陌生,正在尝试不用线性_模型做线性回归。LinearRegression()通过sklearn。我想我即将结束我的编码并准备绘制线条,但我得到了错误“ValueError:shapes(20,1)和(2,1)not aligned:1(dim 1)!=2(dim 0)”。我打印了我的20×1矩阵来确认,它们都没有任何额外的维度或任何东西,因此我不确定为什么它在错误消息中给我(2,1),或者为什么维度不匹配。有人对如何“对齐”这些矩阵有什么建议吗?我正在使用Python 3.5.1

我对机器学习有点陌生,正在尝试不用线性_模型做线性回归。LinearRegression()通过sklearn。我想我即将结束我的编码并准备绘制线条,但我得到了错误“ValueError:shapes(20,1)和(2,1)not aligned:1(dim 1)!=2(dim 0)”。我打印了我的20×1矩阵来确认,它们都没有任何额外的维度或任何东西,因此我不确定为什么它在错误消息中给我
(2,1)
,或者为什么维度不匹配。有人对如何“对齐”这些矩阵有什么建议吗?我正在使用Python 3.5.1

编辑: 我看过stackoverflow中的许多其他ValueError主题,但我很难真正理解这些建议。如果可能的话,非专业人士的条款将不胜感激

根据Georgy的说法,我将代码缩小到了导致错误消息所需的代码行<代码>α、
iter
θ
单独显示需要传递到函数中的所有变量

编辑2:好的,尝试2减少示例代码。谢谢你和我一起做这件事。我在这行代码周围放了一个try-except语句:

theta = theta -(alpha/len(X)) * np.sum((X @ theta.T - y) * X, axis=0)
所述行嵌套在使用
i
作为变量的for循环中。所说的行给了我以下错误:

Traceback (most recent call last):
  File "C:\Users\YungL\Desktop\linearRegression.py", line 30, in <module>
    slope_and_intercept, cost = gradDescent(X_test, Y_test, theta, alpha, iters)
  File "C:\Users\YungL\Desktop\linearRegression.py", line 26, in gradDescent
    theta = theta -(alpha/len(X)) * np.sum((X @ theta.T - y) * X, axis=0)
ValueError: shapes (20,1) and (2,1) not aligned: 1 (dim 1) != 2 (dim 0)
第1列为
X
,第2列为
y
,第3列为
theta
。参考矩阵,这些是每个矩阵中的第一个值。尽管对于θ,这是唯一的值

以下是异常发生时
X
y
的完整矩阵:

[[ 0.07786339]    [[233.]
 [-0.03961813]    [ 91.]
 [ 0.01103904]    [111.]
 [-0.04069594]    [152.]
 [-0.03422907]    [120.]
 [ 0.00564998]    [ 67.]
 [ 0.08864151]    [310.]
 [-0.03315126]    [ 94.]
 [-0.05686312]    [183.]
 [-0.03099563]    [ 66.]
 [ 0.05522933]    [173.]
 [-0.06009656]    [ 72.]
 [ 0.00133873]    [ 49.]
 [-0.02345095]    [ 64.]
 [-0.07410811]    [ 48.]
 [ 0.01966154]    [178.]
 [-0.01590626]    [104.]
 [-0.01590626]    [132.]
 [ 0.03906215]    [220.]
 [-0.0730303 ]]   [ 57.]]
对于矩阵乘法(这是
@
运算符所做的),需要相关矩阵的内部维度进行匹配。也就是说,可以将20 x 1矩阵乘以1 x 2矩阵,但不能乘以2 x 1矩阵。这不是一件具体的事情,它只是矩阵运算的一个基本事实


问题是代码中的
X@theta.T
会导致尺寸不匹配。我不知道这些变量代表什么(你已经编辑了这个问题,把它们从何而来),但是考虑到错误,你可能想要
X@theta
。这将进行20 x 1和1 x 2乘法,而不是在数学上不起作用的2 x 1乘法。

理想情况下,您的示例应该是这样的:“对于这些
x
theta
y
以下代码:
np.sum((x@theta.t-y)*x,axis=0)
给出了这个错误:…”关于您的编辑:我们仍然无法运行您的代码并再现问题,因为您没有提供
diabetes\u数据
diabetes
。但事实上,我们不需要它们,因为你仍然可以减少你的例子。您可以使用来捕捉出现错误的时刻,并打印出
X
y
的值。然后在这里添加它们。您应该打印完整的
X
y
,因为您在公式中使用完整的数组,而不是单个元素。但是我们越来越近了!这也是我的第一本能,当我在给出X[I]和y[I]之前,甚至已经有了所有的信息和一切。我怀疑你想要的是
X@theta
,而不是
X@theta.T
。是的,我可能有一个不正确的线性回归公式。删除
.T
确实消除了我遇到的错误。然而,不幸的是,看起来我必须回到开始,去弄清楚如何生产我想要的产品线。
[[ 0.07786339]    [[233.]
 [-0.03961813]    [ 91.]
 [ 0.01103904]    [111.]
 [-0.04069594]    [152.]
 [-0.03422907]    [120.]
 [ 0.00564998]    [ 67.]
 [ 0.08864151]    [310.]
 [-0.03315126]    [ 94.]
 [-0.05686312]    [183.]
 [-0.03099563]    [ 66.]
 [ 0.05522933]    [173.]
 [-0.06009656]    [ 72.]
 [ 0.00133873]    [ 49.]
 [-0.02345095]    [ 64.]
 [-0.07410811]    [ 48.]
 [ 0.01966154]    [178.]
 [-0.01590626]    [104.]
 [-0.01590626]    [132.]
 [ 0.03906215]    [220.]
 [-0.0730303 ]]   [ 57.]]