我的列向量为:
a = [[1] [2] [3]]
首先,如何摆脱外支架?我需要创建点积aT*a
,答案应该是单数。我当前的代码生成[[14]]
,但我自己需要14
。
这是我当前的代码:
SSE = np.inner(np.transpose(a), np.transpose(a))
答案 0 :(得分:0)
使用hstack
np.hstack(a).dot(a)
array([14])
答案 1 :(得分:0)
首先让我们对表示法保持警惕。
a = [[1] [2] [3]]
无效的Python。即使目标是一个numpy数组,也会出现语法错误。
In [202]: a = np.array([[1],[2],[3]])
In [203]: a.shape
Out[203]: (3, 1)
In [204]: a
Out[204]:
array([[1],
[2],
[3]])
In [205]: print(a)
[[1]
[2]
[3]]
数组的print / str显示省略逗号,但是括号是显示的组成部分。它们有助于显示数组的尺寸。该数组的等效列表显示为[[1], [2], [3]]
。
如果我用(3,1)对(1,3)进行dot
,则结果为(1,1)。 dot
(和您的inner
版本保留了数组的外部尺寸。
In [206]: np.dot(a.T,a)
Out[206]: array([[14]])
In [207]: _.shape
Out[207]: (1, 1)
我们可以将数组“展平”,因此其形状现在为(3,):
In [209]: a1 = a.ravel()
In [210]: a1
Out[210]: array([1, 2, 3])
In [211]: np.dot(a1,a1)
Out[211]: 14
np.dot
具有针对一维数组参数的特殊记录处理。请注意,不需要.T
转置。转置不会对一维数组的形状产生任何影响。
np.inner
也可以,但是np.dot
的使用频率更高:
In [215]: np.inner(a.T, a.T)
Out[215]: array([[14]])
In [216]: np.inner(a1, a1)
Out[216]: 14
近年来,matmul
函数和@
运算符的工作原理类似:
In [217]: a.T@a
Out[217]: array([[14]])
您可以在计算后删除尺寸:
In [218]: (a.T@a).squeeze()
Out[218]: array(14)
In [219]: (a.T@a).item()
Out[219]: 14