我正在使用Matlab,我有一个16x16矩阵,其中列值等于行值matrix of nucleotide substitutions
我想重塑它,所以我只有一行只包含唯一值(换句话说,我想要一行:
7816 0 .... 6432 0 .... 8148 20 .....
我试过B =重塑(矩阵,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
。转置使其成为行向量。