Julia:获取多维数组沿特定轴的范围(最小值/最大值)
Julia: Get range (minimum / maximum values) of a multidimensional array along specific axes
给定一些维度为 N1
、N2
、N3
的数组,Julia 中是否有任何方法可以获取此多维数组的最小值和最大值(范围)给定轴的不同级别?
例如,假设我们有一个大小为 (10, 3, 100)
的数组 my_array
(意思是 N1 = 10
、N2 = 3
、N3 = 100
以与术语保持一致上面使用)。我想获得 N2
的三个不同 'levels' 的最小值和最大值。基本上,我想要一些更简洁的代码来执行以下操作:
N2_1_range = (minimum(my_array[:,1,:]), maximum(my_array[:,1,:])
N2_2_range = (minimum(my_array[:,2,:]), maximum(my_array[:,2,:])
N2_3_range = (minimum(my_array[:,3,:]), maximum(my_array[:,3,:])
所以基本上,对于每个级别 n
所需维度(在本例中,维度 N2
)。
我想要(更好的)代码将此操作推广到任何多维数组的任何所需维度 N
,基本上存储该维度的不同 'settings/levels' 的范围。
您想要 extrema(my_array, dims = 1)
(或 2、或 3),请参阅 extrema
的文档。
然后您可以使用 mapslices
指定调用中应包含冒号的维度:
julia> a = rand(1:10, 10, 3, 100);
julia> mapslices(extrema, a, dims = [1, 3])
1×3×1 Array{Tuple{Int64,Int64},3}:
[:, :, 1] =
(1, 10) (1, 10) (1, 10)
请注意,目前存在一个未解决的问题,即 extrema
的性能比调用 minimum
和 maximum
here 更差,因此您可能需要检查是否这会导致性能问题。
每个切片对你有用吗?
julia> a = rand(10,3,100)
julia> b = [extrema(c) for c in eachslice(a,dims=2)]
3-element Array{Tuple{Float64,Float64},1}:
(0.00019926768773892434, 0.9978490630494796)
(0.00035292069651315927, 0.9998983532542789)
(0.00012135841634353106, 0.9997039922122202)
给定一些维度为 N1
、N2
、N3
的数组,Julia 中是否有任何方法可以获取此多维数组的最小值和最大值(范围)给定轴的不同级别?
例如,假设我们有一个大小为 (10, 3, 100)
的数组 my_array
(意思是 N1 = 10
、N2 = 3
、N3 = 100
以与术语保持一致上面使用)。我想获得 N2
的三个不同 'levels' 的最小值和最大值。基本上,我想要一些更简洁的代码来执行以下操作:
N2_1_range = (minimum(my_array[:,1,:]), maximum(my_array[:,1,:])
N2_2_range = (minimum(my_array[:,2,:]), maximum(my_array[:,2,:])
N2_3_range = (minimum(my_array[:,3,:]), maximum(my_array[:,3,:])
所以基本上,对于每个级别 n
所需维度(在本例中,维度 N2
)。
我想要(更好的)代码将此操作推广到任何多维数组的任何所需维度 N
,基本上存储该维度的不同 'settings/levels' 的范围。
您想要 extrema(my_array, dims = 1)
(或 2、或 3),请参阅 extrema
的文档。
然后您可以使用 mapslices
指定调用中应包含冒号的维度:
julia> a = rand(1:10, 10, 3, 100);
julia> mapslices(extrema, a, dims = [1, 3])
1×3×1 Array{Tuple{Int64,Int64},3}:
[:, :, 1] =
(1, 10) (1, 10) (1, 10)
请注意,目前存在一个未解决的问题,即 extrema
的性能比调用 minimum
和 maximum
here 更差,因此您可能需要检查是否这会导致性能问题。
每个切片对你有用吗?
julia> a = rand(10,3,100)
julia> b = [extrema(c) for c in eachslice(a,dims=2)]
3-element Array{Tuple{Float64,Float64},1}:
(0.00019926768773892434, 0.9978490630494796)
(0.00035292069651315927, 0.9998983532542789)
(0.00012135841634353106, 0.9997039922122202)