为什么矩阵上的`sum`返回Matrix,而不是Vector?

Mic*_*ard 5 julia

如果我做

mat = rand(8,8)
sum(mat, 1)
Run Code Online (Sandbox Code Playgroud)

返回类型是具有单行sum(mat, 2)的Matrix ,而给出具有单列的Matrix.这让我感到惊讶,因为单身尺寸通常会下降0.5,所以我希望两种操作的返回类型都是Vector.为什么单身尺寸没有掉落?

我可能期望这是为了保留方向(例如sum(mat, 1)是行Vector),但0.6上的行为是相同的,它具有明确的1-d RowVectors,因此这似乎不是解释.

谢谢!

Mat*_* B. 5

是的,像sum保留数组的维数这样的缩减。这是有意为之的,因为它可以将结果广播回原始数组。这意味着您可以使用以下方法规范化数组的列./

\n\n
julia> A = rand(1:100, 4, 3)\n4\xc3\x973 Array{Int64,2}:\n 94  50  32\n 46  15  78\n 34  29  41\n 79  22  58\n\njulia> A ./ sum(A, 1)\n4\xc3\x973 Array{Float64,2}:\n 0.371542  0.431034  0.15311\n 0.181818  0.12931   0.373206\n 0.134387  0.25      0.196172\n 0.312253  0.189655  0.277512\n
Run Code Online (Sandbox Code Playgroud)\n\n

虽然二维情况可以由RowVectors 处理,但该方法不能推广到更高维度。

\n\n

也就是说,在其他情况下,删除维度也同样有用。这是问题跟踪器上的一个开放式设计问题

\n