14
我尝试了解如何处理具有numpy的1D数组(向量在线性代数中)。在以下示例中,我产生两个numpy.array a和b:numpy:具有各种形状的1D数组
>>> import numpy as np
>>> a = np.array([1,2,3])
>>> b = np.array([[1],[2],[3]]).reshape(1,3)
>>> a.shape
(3,)
>>> b.shape
(1, 3)
对我来说,a和b具有根据线性代数定义相同的形状:1列,3列,但不能用于numpy的。
现在,numpy的点积:
>>> np.dot(a,a)
14
>>> np.dot(b,a)
array([14])
>>> np.dot(b,b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: objects are not aligned
我有三个不同的输出。点(a,a)和点(b,a)有什么区别?为什么点(b,b)不起作用?
我也有一些differencies与点的产品:
>>> c = np.ones(9).reshape(3,3)
>>> np.dot(a,c)
array([ 6., 6., 6.])
>>> np.dot(b,c)
array([[ 6., 6., 6.]])
感谢您的回答。那么,如果我想用numpy做一些线性代数,最好的做法是什么?转换所有我的矢量在2D numpy.array?我有点困惑于两种不同的形状...... – Marcel 2013-03-28 12:32:40
我自己并没有做太多的线性代数,但我认为这取决于你想要做什么。只是矢量产品和其他简单的操作/计算,然后1D是好的。如果你想做矩阵计算等,你应该使用2D。 – joris 2013-03-28 13:26:56
最好的策略是使用矢量和二维数组的一维数组来表示矩阵。阵列魔术主要需要像形状为“(1,3)”的二维数组的构造,但不是标准线性代数的东西。就线性代数而言,这将对应于1×3矩阵不太有用的对象。 – flonk 2013-03-28 13:54:32