【问题标题】:How can we reshape a matrix into a matrix of matrices我们如何将矩阵重塑为矩阵矩阵
【发布时间】:2017-02-05 23:45:07
【问题描述】:

我有一个10*1300 矩阵,其中10*10 值的每个块都是一个图像。我们可以说我们连续有130 图像。我想重新排列这个矩阵,以便将所有这些图像重新排列在13 行和10 列中,其中每个(row,col) 位置都是10*10 图像。如何才能做到这一点?提前致谢。

示例:

我有一个10*1300 矩阵,其中row=1:10col=1:10 代表 第一张图片,row=1:10col=11:20 代表第二张图片,所以 上。因此,我们将130 图像水平并排排列。我想以这样的方式排列这些130 图像,即第一个10 图像排列在第一个水平窗格中,下一个10 图像排列在第二个水平窗格中,依此类推,从而得到13 水平窗格10 每个窗格中的图像。

【问题讨论】:

  • 13 行 10 列算 130 个数据,而原始数据集是 13000。
  • @il_raffa 我已经编辑了这个问题。好心检查。顺便说一句,这个问题本身是不言自明的,没有这个编辑也。
  • 你能把你的问题分解成一个更小的问题并用实际的矩阵/ces来解释吗?
  • @Sardar_Usama 我提供了一个例子。谢谢。
  • 好吧,现在说得通了。

标签: matlab


【解决方案1】:

您可以结合使用 reshape 和 permute:

blk_size = 10;   % # of rows/columns in each block
blks_in_row = 10;

% reshape M matrix -> output in N
% you should first check that the dimensions of M are correct
N = reshape(M, blk_size, blk_size*blks_in_row, []);
N = permute(N, [1 3 2]);
N = reshape(N, [], blk_size*blks_in_row);

如果您愿意,可以将这三行合并为一条,但我将它们展开以更好地了解发生了什么。

第一行构成一个 3D 数组,输出矩阵的每 10x100 行是一个平面。第二行置换此矩阵,使平面变为列,第三行重塑为二维数组。

【讨论】:

    【解决方案2】:

    您可以使用此代码重新排列矩阵:

    % suppose image is a defined matrix which is 10x1300
    
    rearranged = [];
    for i = 0:12
        startIndex = 100 * i + 1;
        endIndex = startIndex + 100 - 1;
        rearranged = [rearranged; image(:, startIndex:endIndex)];
    end
    

    rearranged 矩阵就是你想要的。

    【讨论】:

    • 它有什么用途?我们已经有了重新排列后获得的初始矩阵。
    • 你会得到一个 130x100 的矩阵。使用您的语言,每行您将获得 10 张图片。
    猜你喜欢
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2023-01-25
    • 2021-10-05
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多