在 python 中,有没有区分行向量和列向量的好方法?到目前为止,我正在使用 numpy 和 scipy,我所看到的是,如果我给一个向量,比如说
from numpy import *
Vector = array([1,2,3])
他们就无法判断我指的是行向量还是列向量。此外:
array([1,2,3]) == array([1,2,3]).transpose()
True
在现实世界中,这根本不是事实。
我知道上述模块中的大多数向量函数都不需要微分。例如 outer(a,b)
或 a.dot(b)
,但为了方便起见,我还是想微分一下。
您可以在数组中增加一个维度来明确区分。
>>> a = np.array([1, 2, 3])
>>> a
array([1, 2, 3])
>>> a.transpose()
array([1, 2, 3])
>>> a.dot(a.transpose())
14
现在强制它成为列向量:
>>> a.shape = (3,1)
>>> a
array([[1],
[2],
[3]])
>>> a.transpose()
array([[1, 2, 3]])
>>> a.dot(a.transpose())
array([[1, 2, 3],
[2, 4, 6],
[3, 6, 9]])
另一种方法是在需要区分时使用 np.newaxis:
>>> a = np.array([1, 2, 3])
>>> a
array([1, 2, 3])
>>> a[:, np.newaxis]
array([[1],
[2],
[3]])
>>> a[np.newaxis, :]
array([[1, 2, 3]])
如果您想在这种情况下获得距离,我建议您使用 "矩阵 "来代替:
matrix([1,2,3]) == matrix([1,2,3]).transpose()
给出:
matrix([[ True, False, False],
[False, True, False],
[False, False, True]], dtype=bool)
您也可以使用 ndarray
明确添加第二个维度:
array([1,2,3])[None,:]
#array([[1, 2, 3]])
和
array([1,2,3])[:,None]
#array([[1],
# [2],
# [3]])