【发布时间】:2016-12-28 23:58:11
【问题描述】:
将行向量和列向量相乘,我期望结果是标量,但它是一维、一元素数组:
julia> [1 2 3] * [4; 5; 6]
1-element Array{Int64,1}:
32
问题 1:这背后的基本原理是什么?
问题 2:接受这是 Julia 的一个怪癖,我想将 1 元素数组转换为标量。使用 [1] 获取第一个元素是一种选择,但可读性不强。这样做的特殊方法是什么?
【问题讨论】:
-
[1 2 3]是一个 1x3 2D 数组。因此,将 2D 数组乘以 1D 数组会得到 1D 数组,就像矩阵乘以向量一样。正如@Chris Rackauckas 提到的,使用dot()给出了一个标量。 -
\cdot<TAB>将生成点运算符⋅,它是dot(...)的简写。因此,OP 中的表达式可以写成:vec([1 2 3])⋅[4;5;6]。注意[1 2 3]仍然需要转为一维向量。 -
@DanGetz:你说得对,它是一个二维数组......所以数组输出是有意义的。我不想使用
dot,因为它需要向量,所以第一个参数需要转换,如你所说。所以高效的版本还是取矩阵乘法的第一个元素。 -
因为我们是从美学的角度探索选项,所以通过切片创建矢量也是一种选择:
[1 2 3][:]⋅[1;2;3]
标签: vector julia matrix-multiplication