Lan*_*don 5 arrays matrix julia
我想弄清楚(在Julia中)当维度本身是一个变量时,如何沿着指定的维度提取数组的一部分.如果维度已知,则可以直接提取数组的一部分.例如,我可以通过执行以下操作来提取第3维的一部分:
A = rand(27,33,11)
A_portion = A[:,:,3:7]
Run Code Online (Sandbox Code Playgroud)
是否有一种紧凑/有效的方法来沿可变维度提取数组的一部分?例如,看起来像这样的东西?
A = rand(27,33,11)
dim = 3 ## dimension along which to grab a portion of the array
first_element = 3 ## first element over specified dimension
last_element = 7 ## last element over specified dimension
A_portion = MyFunction(A,dim,first_sample,last_sample)
Run Code Online (Sandbox Code Playgroud)
一种可能性是为数组维度的每个可能组合(最多一些最大维数)和提取该部分的维度编写一组if语句.例如,像这样:
MyFunction(A::Array,dim::Int,first_element::Int,last_element::Int)
if ndims(A)==1 && dim==1
return A[first_element:last_element]
elseif ndims(A)==2 && dim==1
return A[first_element:last_element,:]
elseif ndims(A)==2 && dim==2
return A[:,first_element:last_element]
elseif ndims(A)==3 && dim==1
...
...
...
Run Code Online (Sandbox Code Playgroud)
显然,为了允许具有大量维度的阵列,这变得非常混乱.这样做有更紧凑/更有效的方法吗?
该功能slicedim执行此操作:
julia> a = rand(2,2,2)
2×2×2 Array{Float64,3}:
[:, :, 1] =
0.754584 0.133549
0.363346 0.731388
[:, :, 2] =
0.415001 0.907887
0.301889 0.763312
julia> slicedim(a, 1, 2)
2×2 Array{Float64,2}:
0.363346 0.301889
0.731388 0.763312
julia> slicedim(a, 3, 1)
2×2 Array{Float64,2}:
0.754584 0.133549
0.363346 0.731388
Run Code Online (Sandbox Code Playgroud)
第二个参数指定维度编号.在第一种情况下,我们在维度1中选择了索引2.在第二种情况下,我们在维度3中选择了索引1.
你也可以使用类似a[fill(:,2)...,1]"splats"两个:进入参数列表后跟a的方法来解决这个问题1.
Jeff Bezanson 的帖子是正确的,但该函数slicedim已重命名,请selectdim 参阅 julia github
\njulia> a = rand(2,2,2)\n2\xc3\x972\xc3\x972 Array{Float64,3}:\n[:, :, 1] =\n 0.835392 0.645282\n 0.398793 0.774604\n\n[:, :, 2] =\n 0.00894267 0.191362\n 0.700798 0.897556\n\n\njulia> selectdim(a, 1, 2)\n2\xc3\x972 view(::Array{Float64,3}, 2, :, :) with eltype Float64:\n 0.398793 0.700798\n 0.774604 0.897556\n\n\njulia> selectdim(a, 3, 1)\n2\xc3\x972 view(::Array{Float64,3}, :, :, 1) with eltype Float64:\n 0.835392 0.645282\n 0.398793 0.774604\n\nRun Code Online (Sandbox Code Playgroud)\n\n(没有足够的声誉来发表评论)
\n| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |