我试图想出一种方法来操作Julia范围,这样它们就可以用特定的单位来指定,然后转换成索引。为了更好的解释,请考虑下面的例子:
julia> Δx = 150
150
julia> x = collect(0:Δx:1000)
7-element Array{Int64,1}:
0
150
300
450
600
750
900
julia> y = @. x^2 + 50
7-element Array{Int64,1}:
50
22550
90050
202550
360050
562550
810050
假设我想得到x
s 100到500之间的每个值。如果我知道相应的索引,我可以通过使用一个范围轻松获得基于索引的数组块:
julia> index_chunk = 2:4
2:4
julia> y[index_chunk]
3-element Array{Int64,1}:
22550
90050
202550
但是,我希望能够得到相同的结果,但创建一个基于单位的索引。差不多
julia> phys_chunk = 100:500
100:500
julia> y[phys_chunk/Δx]
ERROR: BoundsError: attempt to access 7-element Array{Int64,1} at index [0.6666666666666666:0.006666666666666667:3.3333333333333335]
Stacktrace:
[1] throw_boundserror(::Array{Int64,1}, ::Tuple{StepRangeLen{Float64,Base.TwicePrecision{Float64},Base.TwicePrecision{Float64}}}) at ./abstractarray.jl:541
[2] checkbounds at ./abstractarray.jl:506 [inlined]
[3] _getindex at ./multidimensional.jl:742 [inlined]
[4] getindex(::Array{Int64,1}, ::StepRangeLen{Float64,Base.TwicePrecision{Float64},Base.TwicePrecision{Float64}}) at ./abstractarray.jl:1060
[5] top-level scope at REPL[24]:1
但当然,这是失败的。我也尝试过一些类似的事情(比如^{
PS:对于那些熟悉Python的人,我尝试重新创建xarray
的.sel()
切片方法的行为:
In [4]: da = xr.DataArray([1, 2, 3, 4, 5], [("x", [0, 1, 2, 3, 4])])
In [5]: da
Out[5]:
<xarray.DataArray (x: 5)>
array([1, 2, 3, 4, 5])
Coordinates:
* x (x) int64 0 1 2 3 4
In [6]: da.sel(x=slice(0.9, 3.1))
Out[6]:
<xarray.DataArray (x: 3)>
array([2, 3, 4])
Coordinates:
* x (x) int64 1 2 3
那么逻辑索引呢
编辑:根据评论使用DimensionalData.jl添加一些实质内容。(注意,我刚刚试用了这个软件包,所以可能有更好的方法使用它。)
让我创建一个名为
V
的2DDimArray
,它具有与原始post示例相同的x
维度,但现在还有一个我称之为y
的第二维度:请注意,此
V
与y == 0
的原始数据具有相同的值:我可以这样选择
y=0
和100<x<500
的值:相关问题 更多 >
编程相关推荐