我永远不会记得如何做到这一点.
怎么可能去
(n1))到列矩阵(大小(n1,1))?(n1,n2))到数组{T,3}(大小(n1,n2,1))?(n1,n2,n3))到数组{T,4}(大小(n1,n2,n3, 1))?我想知道使用Array并使用它来定义一个带有额外单例尾随维度的新数组.即相反squeeze
你可以这样做reshape.
您可以为此定义一个方法:
add_dim(x::Array) = reshape(x, (size(x)...,1))
Run Code Online (Sandbox Code Playgroud)
julia> add_dim([3;4])
2×1 Array{Int64,2}:
3
4
julia> add_dim([3;4])
2×1 Array{Int64,2}:
3
4
julia> add_dim([3 30;4 40])
2×2×1 Array{Int64,3}:
[:, :, 1] =
3 30
4 40
julia> add_dim(rand(4,3,2))
4×3×2×1 Array{Float64,4}:
[:, :, 1, 1] =
0.483307 0.826342 0.570934
0.134225 0.596728 0.332433
0.597895 0.298937 0.897801
0.926638 0.0872589 0.454238
[:, :, 2, 1] =
0.531954 0.239571 0.381628
0.589884 0.666565 0.676586
0.842381 0.474274 0.366049
0.409838 0.567561 0.509187
Run Code Online (Sandbox Code Playgroud)
在 Julia 1.0 发布之前的一段时间,reshape(x, Val{N})添加了一个重载,这导致N > ndim(x)添加最右边的单例维度。
所以以下工作:
\n\njulia> add_dim(x::Array{T, N}) where {T,N} = reshape(x, Val(N+1))\nadd_dim (generic function with 1 method)\n\njulia> add_dim([3;4])\n2\xc3\x971 Array{Int64,2}:\n 3\n 4\n\njulia> add_dim([3 30;4 40])\n2\xc3\x972\xc3\x971 Array{Int64,3}:\n[:, :, 1] =\n 3 30\n 4 40\n\njulia> add_dim(rand(4,3,2))\n4\xc3\x973\xc3\x972\xc3\x971 Array{Float64,4}:\n[:, :, 1, 1] =\n 0.0737563 0.224937 0.6996\n 0.523615 0.181508 0.903252\n 0.224004 0.583018 0.400629\n 0.882174 0.30746 0.176758\n\n[:, :, 2, 1] =\n 0.694545 0.164272 0.537413\n 0.221654 0.202876 0.219014\n 0.418148 0.0637024 0.951688\n 0.254818 0.624516 0.935076\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1508 次 |
| 最近记录: |