2016-01-30 43 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

相關問題