我从numpy开始,并试图找出它的数组是如何为列向量工作的。定义如下:
x1 = np.array([3.0, 2.0, 1.0])
x2 = np.array([-2.0, 1.0, 0.0])打电话
print("inner product x1/x2: ", np.inner(x1, x2))按预期生成inner product x1/x2: -4.0 --这使我认为numpy假设这个表单的数组是一个列向量,并且作为内部函数的一部分,将其中一个转换成一个标量。然而,我编写了一些代码来测试这个想法,它给出了一些我不明白的结果。
在对如何使用.T指定数组是列向量进行了一些搜索之后,我定义了以下内容:
x = np.array([1, 0]).T
xT = np.array([1, 0])其中,我希望x是列向量,xT是行向量。但是,调用以下内容:
print(x)
print(x.shape)
print(xT)
print(xT.shape)产生这种情况:
[1 0]
(2,)
[1 0]
(2,)这表明这两个数组具有相同的维度,尽管其中一个是另一个的转置。此外,调用np.inner(x,x)和np.inner(x,xT)都会产生相同的结果。我是误解了.T函数,还是误解了numpy/线性代数的一些基本特征?我不觉得x& xT应该是相同的向量。
最后,我最初使用.T的原因是试图将列向量定义为x = np.array([[1], [0]]),并调用print(np.inner(x, x))生成以下内容作为内部产品:
[[1 0]
[0 0]]这就是你期望看到的外部产品的输出。我是不是误用了这种定义列向量的方法?
发布于 2019-10-20 19:17:08
查看inner文档:
Ordinary inner product of vectors for 1-D arrays
...
np.inner(a, b) = sum(a[:]*b[:])使用示例数组:
In [374]: x1 = np.array([3.0, 2.0, 1.0])
...: x2 = np.array([-2.0, 1.0, 0.0])
In [375]: x1*x2
Out[375]: array([-6., 2., 0.])
In [376]: np.sum(x1*x2)
Out[376]: -4.0
In [377]: np.inner(x1,x2)
Out[377]: -4.0
In [378]: np.dot(x1,x2)
Out[378]: -4.0
In [379]: x1@x2
Out[379]: -4.0从wiki到dot/scalar/inner product
https://en.wikipedia.org/wiki/Dot_product
two equal-length sequences of numbers (usually coordinate vectors) and returns a single number

If vectors are identified with row matrices, the dot product can also
be written as a matrix product从线性代数世界出发,很容易从矩阵(2d)和向量(1行或1列矩阵)的角度来考虑一切。MATLAB/Octave在这个框架内工作。但是numpy更通用,数组具有0或更多的维度,而不仅仅是2。
np.transpose没有添加维度,它只是改变了现有的维度。因此,x1.T不会改变任何东西。
可以用np.array([[1], [0]])生成列向量,或者:
In [381]: x1
Out[381]: array([3., 2., 1.])
In [382]: x1[:,None]
Out[382]:
array([[3.],
[2.],
[1.]])
In [383]: x1.reshape(3,1)
Out[383]:
array([[3.],
[2.],
[1.]])np.inner描述当输入不是1d时会发生什么,比如2d (2,1)形状x。它说它使用np.tensordot,它是矩阵积np.dot的推广。
In [386]: x = np.array([[1],[0]])
In [387]: x
Out[387]:
array([[1],
[0]])
In [388]: np.inner(x,x)
Out[388]:
array([[1, 0],
[0, 0]])
In [389]: np.dot(x,x.T)
Out[389]:
array([[1, 0],
[0, 0]])
In [390]: x*x.T
Out[390]:
array([[1, 0],
[0, 0]])这是(2,1)和(1,2)的元素乘积,产生(2,2)或外积。
https://stackoverflow.com/questions/58476122
复制相似问题