Numpy列和行向量

时间:2015-12-09 12:57:29

标签: python numpy

为什么numpy可以将2x2矩阵乘以1x2行向量?

import numpy as np

I = np.array([[1.0, 0.0], [0.0, 1.0]])
x = np.array([2.0,3.0])

In: I * x
Out: array([[ 2.,  0.], [ 0.,  3.]])

转置x也没有意义。行向量保持行向量?

In: x.T
Out: array([ 2.,  3.])

从数学的角度来看,这种表现非常混乱。

3 个答案:

答案 0 :(得分:7)

Numpy数组是不是向量。或者重要的矩阵。他们是阵列。

它们可以使用来表示向量,矩阵,张量或任何你想要的东西。然而,numpy的天才是代表数组,并让用户决定它们的含义。

在数组上定义的一个操作是(逐项)乘法。此外,通过广播,您可以通过“扩展”来操作不同形状的阵列。它在缺失的维度中,所以你的乘法实际上是:(逐项)乘法:

[[1.0, 0.0], [0.0, 1.0]] * [[2.0, 2.0], [3.0, 3.0]]

如果你想使用点积,在matricial意义上,你应该使用.dot方法,它正是这样做:将其输入解释为向量/矩阵/张量,并做点积。 / p>

答案 1 :(得分:1)

如果你检查了x的形状,你会看到(2,)这意味着numpy数组:

 In [58]: x.shape
 Out[58]: (2,)

如果您需要1x2矢量,可以使用reshape

x_vec = x.reshape(2,1)
In [64]: x_vec.shape
Out[64]: (2, 1)

然后你可以使用numpy dot方法进行乘法运算:

 In [68]: I.dot(x_vec)
 Out[68]:
 array([[ 2.],
       [ 3.]])

dot也可以不重塑:

 In [69]: I.dot(x)
 Out[69]: array([ 2.,  3.])

您也可以使用np.matmul来执行此操作:

In [73]: np.matmul(I, x_vec)
Out[73]:
array([[ 2.],
       [ 3.]])   

答案 2 :(得分:1)

如果您使用的是Python 3.5,则可以使用@运算符。

In [2]: I@x
Out[2]: array([ 2.,  3.])