使用螺旋路径将矩阵转换为矢量

时间:2014-04-28 20:38:25

标签: matlab math vector matrix spiral

到目前为止,我已经看到当有人想要逐个使用螺旋读取矩阵的元素时,它们总是意味着向外开始并使用MxM矩阵慢慢移动到中心。我们如何做相反的事情,从矩阵内的随机点开始并使用"螺旋式"读取所有元素的路径。

我正在使用Matlab进行测试。

实施例

mat=
  1 2 3
  4 5 6
  7 8 9 

如果我们说要从垫子(3,1)开始顺时针旋转那么我们就有了

vec=
  7, 8, 4, 5, 6, 9, 1, 2, 3

如果我们从mat(2,2)开始,那么

vec=
5, 6, 9, 8, 7, 4, 1, 2, 3

1 个答案:

答案 0 :(得分:2)

一种可能的方法:

mat = [1 2 3; 4 5 6; 7 8 9];
M = length(mat); % Assuming mat is always MxM

r = 3;
c = 1;

temp = spiral(2 * M - 1);
temp = temp(M - r + 1:end - r + 1, M - c + 1:end - c + 1);
[~, idx] = sort(temp(:));
vec = mat(idx).'

使用r = 3c = 1

运行的结果
vec =

     7     8     4     5     6     9     1     2     3

使用r = 2c = 2

运行的结果
vec =

     5     6     9     8     7     4     1     2     3