kjo*_*kjo 3 matlab multidimensional-array
基本上,我正在寻找一个概括flipud
和fliplr
翻转nd-array的第i维.
当要翻转的尺寸是第一个时,我想我可以使用
function flipped = flipfirst(ndarr)
sz = size(ndarr);
flipped = reshape(flipud(reshape(ndarr, sz(1), [])), sz);
end
Run Code Online (Sandbox Code Playgroud)
同样,如果要翻转的维度是最后一个,我可以使用
function flipped = fliplast(ndarr)
sz = size(ndarr);
flipped = reshape(fliplr(reshape(ndarr, [], sz(end))), sz);
end
Run Code Online (Sandbox Code Playgroud)
我确信我可以编写更通用的代码,通过调用permute
和诸如此类的东西,但是有什么内置的吗?
我不确定reshape
上面所有的内容是多么昂贵,但如果是的话,我也会对更有效的非内置方法感兴趣.
A = rand(2,2,2);
B = flip(A,3);
Run Code Online (Sandbox Code Playgroud)
对于旧版本,您可以使用flipdim
:
A = rand(2,2,2);
B = flipdim(A,3);
Run Code Online (Sandbox Code Playgroud)
键入edit flipdim
在命令窗口中看到的聪明的代码flipdim
.
您还可以使用离散傅立叶变换的时间反转属性翻转数组。下面的代码适用于任意数量的维度,但我们使用二维数组来演示它,因为它更容易检查结果。
A = magic(8);
d = 1; % dimension along which to flip
% Create frequency array w, we need it to go along dimension d
sz = size(A, d);
w = 2*pi * (0:sz-1) / sz;
w = shiftdim(w(:), 1-d);
% The actual time reversal property:
B = ifft( conj(fft(A, [], d)) .* exp(1j*w), [], d, 'symmetric');
Run Code Online (Sandbox Code Playgroud)
(是的,与 相比,这过于复杂且昂贵得离谱flip
,但它很有趣!)
归档时间: |
|
查看次数: |
106 次 |
最近记录: |