如果我这样做了
mat = rand(8,8)
sum(mat, 1)返回类型是单行的Matrix,而sum(mat, 2)返回的是单列的Matrix。这让我大吃一惊,因为单例维度通常在0.5中下降,所以我预计这两个操作的返回类型都是Vector。为什么这里没有删除单例维度?
我可能认为这是为了保持方向(例如,sum(mat, 1)是一个行向量),但在0.6上的行为是相同的,它具有显式的1-d RowVectors,所以这似乎不是一个解释。
谢谢!
发布于 2017-02-21 03:59:23
是的,像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。
https://stackoverflow.com/questions/42352927
复制相似问题