阵列点积

时间:2019-05-20 00:09:00

标签: python arrays numpy product

我的列向量为:

a = [[1] [2] [3]]

首先,如何摆脱外支架?我需要创建点积aT*a,答案应该是单数。我当前的代码生成[[14]],但我自己需要14

这是我当前的代码:

SSE = np.inner(np.transpose(a), np.transpose(a))

2 个答案:

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