gpt4 book ai didi

matlab - 矩阵 "Zigzag"重新排序

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:02 25 4
gpt4 key购买 nike

我在 MATLAB 中有一个 NxM 矩阵,我想以与 JPEG 重新排序其子 block 像素的方式类似的方式重新排序:

zigzag layout pattern (image from Wikipedia)

我希望算法具有通用性,这样我就可以传入任意维度的二维矩阵。我是一名 C++ 程序员,很想编写一个老式循环来完成此任务,但我怀疑在 MATLAB 中有更好的方法来完成此任务。

我宁愿想要一个在 NxN 矩阵上运行并从那里开始的算法。

示例:

1 2 3
4 5 6 --> 1 2 4 7 5 3 6 8 9
7 8 9

最佳答案

考虑代码:

M = randi(100, [3 4]);                      %# input matrix

ind = reshape(1:numel(M), size(M)); %# indices of elements
ind = fliplr( spdiags( fliplr(ind) ) ); %# get the anti-diagonals
ind(:,1:2:end) = flipud( ind(:,1:2:end) ); %# reverse order of odd columns
ind(ind==0) = []; %# keep non-zero indices

M(ind) %# get elements in zigzag order

一个 4x4 矩阵的例子:

» M
M =
17 35 26 96
12 59 51 55
50 23 70 14
96 76 90 15

» M(ind)
ans =
17 35 12 50 59 26 96 51 23 96 76 70 55 14 90 15

和一个非方矩阵的例子:

M =
69 9 16 100
75 23 83 8
46 92 54 45
ans =
69 9 75 46 23 16 100 83 92 54 8 45

关于matlab - 矩阵 "Zigzag"重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3024939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com