【问题标题】:getting rid of the upper or lower triangular part of a symmetric matrix摆脱对称矩阵的上三角或下三角部分
【发布时间】:2017-03-09 18:05:58
【问题描述】:

我有一些统计值的对称矩阵,我想在 Matlab 中使用 imagesc 绘制。矩阵的大小是 112 X 28,这意味着我想为每列显示 4 行。我怎样才能摆脱这个矩阵的上三角或下三角部分?因为这意味着每列对角删除 4 行 tril 或 triu 函数不起作用(它们用于方阵)。 谢谢

【问题讨论】:

    标签: matlab matlab-figure


    【解决方案1】:

    你可以使用kron函数

    kron(triu(ones(28)),[1 ;1 ;1 ;1])
    

    【讨论】:

      【解决方案2】:

      如果您有图像处理工具箱,您可以使用 imresize 调整上三角蒙版的大小,然后您可以使用它来选择适当的数据

      msk = imresize(triu(true(min(size(a)))), size(a), 'nearest');
      
      % Just zero-out the lower diag
      zeroed = msk .* a;
      
      % Select the elements in the upper diagonal
      upperdiag = a(msk);
      

      如果你没有图像处理工具箱(和imresize),你可以这样做

      msk = reshape(repmat(permute(triu(true(min(size(a)))), [3 1 2]), size(a,1)/size(a,2), 1), size(a));
      

      【讨论】:

      • 是的,我有图像处理工具箱,我得到了我想要的 imagesc(zeroed) 谢谢!
      【解决方案3】:

      我想出了一个使用meshgrid的解决方案

      首先定义一个覆盖矩阵所有索引的网格

      [X, Y] = meshgrid([1:28], [1:112]);
      

      您想屏蔽高于(或低于)对角线 4x = y 的所有值。只需将掩码定义为 X 和 Y 值的函数即可。

      mask = 4.*X >= Y; %>= Selects above the diagonal, <= selects below the diagonal
      

      这是面具。请注意,轴不是对称的。

      您可以使用此方法在网格上定义任何分隔线或功能。你甚至可以做抛物线

      mask_parabola = (X-14).^2 >= Y;
      

      【讨论】:

        【解决方案4】:

        您可以使用bsxfun 创建掩码,如下所示:

        M = 112; % number of rows
        N = 28; % number of columns
        mask = bsxfun(@le, (1:M).', (1:N)*round(M/N)); % create mask
        data = data.*mask; % multiply your data matrix by the mask
        

        【讨论】:

          【解决方案5】:

          有很好的答案,但也许这个可以是使用 triu 函数的替代方案:

          % image
          img = rand(112, 28);
          
          % utilize a square matrix to use triu command
          temp = nan(112, 112);
          temp(:, 1:4:end) = img;
          temp = triu(temp, -3);
          
          % put the relevant elements back
          img = temp(:, 1:4:end);
          

          【讨论】:

            猜你喜欢
            • 2012-02-12
            • 1970-01-01
            • 2011-06-16
            • 2016-10-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多