如何向数组添加维度?(与`挤压'相反)

Lyn*_*ite 4 julia

我永远不会记得如何做到这一点.

怎么可能去

  • 从矢量(大小(n1))到列矩阵(大小(n1,1))?
  • 或者从矩阵(大小(n1,n2))到数组{T,3}(大小(n1,n2,1))?
  • 或者从数组{T,3}(大小(n1,n2,n3))到数组{T,4}(大小(n1,n2,n3, 1))?
  • 等等.

我想知道使用Array并使用它来定义一个带有额外单例尾随维度的新数组.即相反squeeze

Lyn*_*ite 9

你可以这样做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)


Lyn*_*ite 3

在 Julia 1.0 发布之前的一段时间,reshape(x, Val{N})添加了一个重载,这导致N > ndim(x)添加最右边的单例维度。

\n\n

所以以下工作:

\n\n
julia> 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\n
Run Code Online (Sandbox Code Playgroud)\n