gpt4 book ai didi

python - Numpy:具有各种形状的一维数组

转载 作者:太空狗 更新时间:2023-10-29 16:56:03 25 4
gpt4 key购买 nike

我尝试了解如何使用 NumPy 处理 1D 数组(线性代数中的向量)。

在下面的示例中,我生成了两个 numpy.array ab:

>>> 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)

对我来说,ab 根据线性代数定义具有相同的形状:1 行,3 列,但 NumPy 不是。

现在,NumPy dot 产品:

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

我有三个不同的输出。

dot(a,a)dot(b,a) 有什么区别?为什么点(b,b) 不起作用?

我与那些点积也有一些不同之处:

>>> c = np.ones(9).reshape(3,3)
>>> np.dot(a,c)
array([ 6., 6., 6.])
>>> np.dot(b,c)
array([[ 6., 6., 6.]])

最佳答案

请注意,您不仅在使用一维数组:

In [6]: a.ndim
Out[6]: 1

In [7]: b.ndim
Out[7]: 2

所以,b 是一个二维数组。您还可以在 b.shape 的输出中看到这一点:(1,3) 表示二维,因为 (3,) 是一维。

np.dot 的行为对于一维和二维数组是不同的(来自 docs ):

For 2-D arrays it is equivalent to matrix multiplication, and for 1-D arrays to inner product of vectors

这就是您得到不同结果的原因,因为您混合了一维和二维数组。由于 b 是一个二维数组,np.dot(b, b) 尝试对两个 1x3 矩阵进行矩阵乘法,但失败了。


对于一维数组,np.dot 对向量进行内积:

In [44]: a = np.array([1,2,3])

In [45]: b = np.array([1,2,3])

In [46]: np.dot(a, b)
Out[46]: 14

In [47]: np.inner(a, b)
Out[47]: 14

对于二维数组,它是一个矩阵乘法(因此 1x3 x 3x1 = 1x1,或 3x1 x 1x3 = 3x3):

In [49]: a = a.reshape(1,3)

In [50]: b = b.reshape(3,1)

In [51]: a
Out[51]: array([[1, 2, 3]])

In [52]: b
Out[52]:
array([[1],
[2],
[3]])

In [53]: np.dot(a,b)
Out[53]: array([[14]])

In [54]: np.dot(b,a)
Out[54]:
array([[1, 2, 3],
[2, 4, 6],
[3, 6, 9]])

In [55]: np.dot(a,a)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-55-32e36f9db916> in <module>()
----> 1 np.dot(a,a)

ValueError: objects are not aligned

关于python - Numpy:具有各种形状的一维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15680593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com