如果我这样做
mat = rand(8,8)
sum(mat, 1)
返回类型是具有单行的Matrix,而sum(mat, 2)
为Matrix提供单列。这让我感到惊讶,因为单身尺寸通常会下降0.5,所以我希望两种操作的返回类型都是Vector。为什么单身维度没有在这里删除?
我可能期望这是为了保留方向(例如sum(mat, 1)
是一行Vector),但0.6上的行为是相同的,它有明确的1-d RowVectors,所以这似乎不是一个解释。
谢谢!
答案 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。