如何重塑具有相同列和行值的矩阵?

时间:2016-01-30 22:46:24

标签: matlab matrix

我正在使用Matlab,我有一个16x16矩阵,其中列值等于行值matrix of nucleotide substitutions

我想重塑它,所以我只有一行只包含唯一值(换句话说,我想要一行:

7816 0 .... 6432 0 .... 8148 20 .....

我试过B =重塑(矩阵,1,[]);并且它可以工作但不幸的是它也给了我非独特的值(它基本上是每一行并将它粘贴在前一行旁边。)

有没有办法做到这一点?谢谢!

1 个答案:

答案 0 :(得分:2)

给定对称输入矩阵A

>> A = randi(30, 5)
A =

    9   13   19   23    8
   13    4    5   14   19
   16   25   13   11   27
   12    3   20   25   11
    1   12    9   20   27

>> A = A + A.'
A =

   18   26   35   35    9
   26    8   30   17   31
   35   30   26   31   36
   35   17   31   50   31
    9   31   36   31   54

>> A(A < 10) = 0
A =

   18   26   35   35    0
   26    0   30   17   31
   35   30   26   31   36
   35   17   31   50   31
    0   31   36   31   54

您可以提取下三角形部分并将其转换为这样的矢量:

>> B = A(find(tril(ones(size(A))))).'
B =

   18   26   35   35    0    0   30   17   31   26   31   36   50   31   54

请注意,这会跳过第二列中的26,第二列中的35, 30,依此类推。

这使得1的矩阵的下三角形部分与A的大小相同,并找到所有1个值的索引。 (它绕过原始矩阵中的0值。)然后它使用find返回的1的位置来索引原始矩阵A。转置使其成为行向量。