基本上,我在尋找flipud
和fliplr
的泛化來翻轉nd數組的第i維。是否有一種內置的方法來翻轉nd數組的第i維?
當要翻轉的尺寸是第一位的,我想我可以使用
function flipped = flipfirst(ndarr)
sz = size(ndarr);
flipped = reshape(flipud(reshape(ndarr, sz(1), [])), sz);
end
同樣,如果要翻轉的尺寸是最後一個,我可以用
function flipped = fliplast(ndarr)
sz = size(ndarr);
flipped = reshape(fliplr(reshape(ndarr, [], sz(end))), sz);
end
我確信我可以編寫一些更一般的東西,撥打電話permute
等等,但是有什麼內置的嗎?
我不確定上面所有的reshape
-ing都是多麼昂貴,但如果是這樣,我也會對更高效的非內置方法感興趣。
良好的聯繫。我想知道'flip'是如何提供更快,更高效的內存選擇的「,以及它所帶來的改進有多重要。無論如何,我一定會從「flipdim」翻轉到「flip」。 – chappjc
@chappjc:'flip'是一個本地函數,而'flipdim'不是。對於我的機器上的大型陣列,一些簡單的時間測試「flip」大約快了2.5倍。至少在大數組的情況下,'flipdim'需要建立一個大的索引向量,但是可能還有其他的C級優化。 – horchler