Python Numpy列和行向量

Python Numpy列和行向量,python,numpy,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.]]) In: x.T Out: array([ 2., 3.]) 换位x也没有意义。行向量还是行向量 import numpy as np I = np.array([[1.0, 0

为什么在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.]])
In: x.T
Out: array([ 2.,  3.])
换位x也没有意义。行向量还是行向量

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.]])
In: x.T
Out: array([ 2.,  3.])
从数学角度来看,表示法非常混乱。

如果您检查x的形状,您将看到2,这意味着numpy数组:

 In [58]: x.shape
 Out[58]: (2,)
如果需要1x2矢量,可以使用重塑:

然后可以使用numpy方法进行乘法:

 In [68]: I.dot(x_vec)
 Out[68]:
 array([[ 2.],
       [ 3.]])
但dot也可以在不重塑形状的情况下工作:

 In [69]: I.dot(x)
 Out[69]: array([ 2.,  3.])
您还可以使用以下方法:

In [73]: np.matmul(I, x_vec)
Out[73]:
array([[ 2.],
       [ 3.]])   
如果您选中x的形状,您将看到2,这意味着numpy数组:

 In [58]: x.shape
 Out[58]: (2,)
如果需要1x2矢量,可以使用重塑:

然后可以使用numpy方法进行乘法:

 In [68]: I.dot(x_vec)
 Out[68]:
 array([[ 2.],
       [ 3.]])
但dot也可以在不重塑形状的情况下工作:

 In [69]: I.dot(x)
 Out[69]: array([ 2.,  3.])
您还可以使用以下方法:

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

如果您使用的是Python 3.5,那么可以使用@operator

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

如果您使用的是Python 3.5,那么可以使用@operator

In [2]: I@x
Out[2]: array([ 2.,  3.])
Numpy数组不是向量。或者是矩阵。它们是数组

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

在数组上定义的一个操作是逐项乘法。此外,广播允许您通过在缺失维度中“扩展”不同形状的数组,从而对其进行操作,因此您的乘法实际上是以下各项的逐项乘法:

[[1.0, 0.0], [0.0, 1.0]] * [[2.0, 2.0], [3.0, 3.0]]
如果你想使用点积,在矩阵的意义上,你应该使用.dot方法,这正是:将其输入解释为向量/矩阵/张量,然后做点积。

Numpy数组不是向量。或者是矩阵。它们是数组

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

在数组上定义的一个操作是逐项乘法。此外,广播允许您通过在缺失维度中“扩展”不同形状的数组,从而对其进行操作,因此您的乘法实际上是以下各项的逐项乘法:

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

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

在计算机中,1x2数组和2x1数组之间不应该有什么区别,它们只是一个数组。现在,如果你想要点积,我相信它是在numpy或SCIPY中,你有两个问题:第一,*是元素的多重化。广播规则允许不同形状的阵列以这种方式相互传播。第二个问题的解释是:np乘积等于np.数组[[1.0,0.0],[0.0,1.0]]*np.数组[[2.0,2.0],[3.0,3.0]]在计算机中,1x2数组和2x1数组之间不应该有什么区别,它们只是一个数组。现在,如果你想要点积,我相信它是在numpy或SCIPY中,你有两个问题:第一,*是元素的多重化。广播规则允许不同形状的阵列以这种方式相互传播。第二个问题的解释是:np乘积等于np.array[[1.0,0.0],[0.0,1.0]]*np.array[[2.0,2.0],[3.0,3.0]]相当于python中的matmul 2.x>2.6相当于python中的matmul 2.x>2.6