我有一个大小为330x534x223的数组,其中包含值的分布,如3d图像。它的大小对我来说太大了,所以我希望在每个维度上重新采样20倍。
有什么可以想到的方法吗?我试过检查文档
谢谢
答案 0 :(得分:9)
如果你正在思考"缩略图,"然后只是采取每20个元素可能不满意。对于同时平滑和子样本以及非常好的性能的内容,我建议来自JuliaImages的restrict
(减少2倍,你可以重复调用它)。
答案 1 :(得分:5)
这个怎么样?
julia> subsample(a, n) = getindex(a, (indices(a,i)[1:n:end] for i=1:ndims(a))...)
subsample (generic function with 1 method)
julia> a = reshape(1:10^6, (100,100,100));
julia> subsample(a, 50)
2×2×2 Array{Int64,3}:
[:, :, 1] =
1 5001
51 5051
[:, :, 2] =
500001 505001
500051 505051
这也适用于具有非常规索引的数组,如OffsetArrays
。
对于大型数组,与使用范围的直接索引相比,此实现的开销可以忽略不计。
修改强> 类型稳定版本:
subinds(n, inds) = (first(inds)[1:n:end], subinds(n, Base.tail(inds))...)
subinds(n, ::Tuple{}) = ()
subsample(a, n) = getindex(a, subinds(n, indices(a))...)