2016-01-30 17 views
0

我正在Matlab和我有一个16×16的矩阵,其中列的值是等于行值matrix of nucleotide substitutions如何使用相同的列和行值对矩阵进行整形?

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

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

我试图B =重塑(基质,1,[]);和它作品,但不幸的是,它给我也非独特的价值观(它基本上是把每一行粘贴在旁边的前一个)

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

+1

输出矩阵是否应该有某种顺序?如果订单不重要,请查看https://www.mathworks.com/help/matlab/ref/unique.html。 – akamath

+0

只要它只是一行,就不是真的。我阅读了独特的内容,但其中一些值是相同的(例如0),但并不一定非唯一。输出应该是一行,包含136个值。 – JFGM

+0

我不明白你所期望的输出。对于像“魔法(4)+魔法(4)”这样的小例子,你期望输出什么? – Daniel

回答

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。转置以使其成为一个行向量。

+0

非常感谢,让我试试这个! – JFGM

+0

它的工作非常感谢! – JFGM

+0

+1了解问题;)。正在搜索文档20分钟,因为我认为有一个内置的这样做,只是为了实现'squareform'不能在这里使用。 – Daniel

相关问题