MATLAB中的矩阵转换

时间:2018-11-24 03:37:50

标签: arrays matlab matrix

例如,我有一个矩阵A(图1)。当变量n = 2时,我希望将其转换为矩阵B。红色矩形表示每列的转换规则。根据此规则,当n = 3时,它可以成为矩阵C。

我已经使用for循环方法编写了一个脚本,但是当矩阵A非常大时(例如11688 * 140000),这是浪费时间。有解决此问题的有效方法吗?

图1:

Figure 1

2 个答案:

答案 0 :(得分:2)

这是使用reshapeimplicit expansion的一种方式:

result = reshape(A((1:size(A,1)-n+1) + (0:n-1).', :), n, []);

例如,假设n = 3。隐式扩展用于提取行的索引:

row_ind = (1:size(A,1)-n+1) + (0:n-1).';

创建以下矩阵:

1   2
2   3
3   4

提取A的所需行:

A_expanded = A(row_ind, :)

将矩阵row_ind用作索引时,其行为类似于矢量:

                1
                2
1   2           3
2   3     ->    2
3   4           3  
                4


A_expanded =

   3   5   7
   6   8   9
   2   6   3
   6   8   9
   2   6   3
   1   2   1

现在A_expanded可以调整为所需的大小:

result = reshape(A_expanded, n, []);

>>result =

   3   6   5   8   7   9
   6   2   8   6   9   3
   2   1   6   2   3   1

答案 1 :(得分:1)

如果您拥有图像处理工具箱,则可以按以下方式使用im2col

result = im2col(A, [n 1], 'sliding');