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

时间:2017-02-20 19:37:55

标签: julia

如果我这样做

mat = rand(8,8)
sum(mat, 1)

返回类型是具有单行的Matrix,而sum(mat, 2)为Matrix提供单列。这让我感到惊讶,因为单身尺寸通常会下降0.5,所以我希望两种操作的返回类型都是Vector。为什么单身维度没有在这里删除?

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

谢谢!

1 个答案:

答案 0 :(得分:4)

是的,像sum这样的缩减可以保留数组的维数。这是故意的,因为它可以将结果广播回原始数组。这意味着您可以使用./

规范化数组的列
julia> A = rand(1:100, 4, 3)
4×3 Array{Int64,2}:
 94  50  32
 46  15  78
 34  29  41
 79  22  58

julia> A ./ sum(A, 1)
4×3 Array{Float64,2}:
 0.371542  0.431034  0.15311
 0.181818  0.12931   0.373206
 0.134387  0.25      0.196172
 0.312253  0.189655  0.277512

虽然RowVector可能能够处理二维案例,但这种方法并不能推广到更高维度。

也就是说,在其他情况下,降维将be similarly useful。这是open design question on the issue tracker