【发布时间】:2016-11-13 00:07:48
【问题描述】:
我发现我经常需要将 (5,) 重塑为 (5,1) 才能使用点积。什么不能只使用形状为 (5,) 的向量的点积?
【问题讨论】:
-
“我不能只使用形状为 (5,) 的向量的点积” - 你可以做到这一点
我发现我经常需要将 (5,) 重塑为 (5,1) 才能使用点积。什么不能只使用形状为 (5,) 的向量的点积?
【问题讨论】:
要使用点积,您需要矩阵(用二维数组表示)。维数为 (5,) 的数组是 5 个元素的平面数组(一维数组),其中 (5, 1) 是 1 列 5 行的矩阵。
>>> import numpy as np
>>> np.zeros((5,))
array([ 0., 0., 0., 0., 0.]) # single flat array
>>> np.zeros((1,5))
array([[ 0., 0., 0., 0., 0.]]) # array with-in array
>>> np.zeros((5,1))
array([[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.]])
>>>
【讨论】:
这是因为当您使用arr = np.ones((5)) 创建一个数组时,它会得到一个包含 5 个元素的一维数组,另一方面,当您使用 arr = np.ones((5, 1)) 创建一个数组时,它会创建一个包含 5 行和 1 个元素的二维数组柱子。下面的例子会让你更清楚:
>>> import numpy as np
>>> a = np.ones((5, 1))
>>> a
array([[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.]])
>>> a = np.ones((5))
>>> a
array([ 1., 1., 1., 1., 1.])
【讨论】: