2013-08-23 34 views
-3

如果我有這樣一個矩陣:選擇鄰居,找到前n個在Matlab

sample = [1    0.21852382  0.090085552 0.219984954 0.446286385; 
      0.21852382  1    0.104580323 0.138429617 0.169216538; 
      0.090085552 0.104580323 1    0.237582739 0.105637177; 
      0.219984954 0.138429617 0.237582739 1   0.192753169; 
      0.446286385 0.169216538 0.105637177 0.192753169 1   ] 

我想找到在Matlab每行前3最大值。 我在Matlab中做什麼? 這是真的嗎?我想在選擇的鄰居中找到top-N方法。

+0

我想在行中找到最大值,然後在推薦系統中使用這些最大值。 – sima412

+0

請明確添加您所需的輸出。 – Frederick

回答

1

我會推薦改寫你的問題。你說你想要在每一行中排名前十的最大值,但是你給出的矩陣只有五列:/

認爲你正在尋找的是這樣的東西。

sample = [1    0.21852382  0.090085552 0.219984954 0.446286385; 
      0.21852382  1    0.104580323 0.138429617 0.169216538; 
      0.090085552 0.104580323 1    0.237582739 0.105637177; 
      0.219984954 0.138429617 0.237582739 1   0.192753169; 
      0.446286385 0.169216538 0.105637177 0.192753169 1   ] 
B = sort(sample,2,'descend') % will sort the rows of the array in descending order 
C = B(:,1:N)     % Select the top N values. 

希望能回答你的問題。

+0

哦對不起,我更新它。謝謝。但是2什麼是B =排序(樣本,2,'下降')?如果我有一個矩陣100 * 100那麼它是真的嗎? – sima412

+0

是的。我簡單地對數組中的行進行排序,名爲'sample',並將結果收集到名爲'B'的變量中。然後,我通過用'B(:,1:N)'索引列來提取頂部'N'值。例如,如果我想要「樣本」第一行中的前十個值,我會執行以下操作:'B = sort(sample,2,'descend'); top10row1 = B(1,1:10);'希望對你說清楚。 – dsgrnt

+0

sort中的'2'(sample,2,'descend')'僅僅意味着我們正在按照數組'sample'的第二維排序。嘗試在命令提示符處輸入'help sort'。 '幫助'功能是你的朋友。 – dsgrnt

0

如果這不是您想要的,請嘗試[Y,I] = max(matrix,[],desired_dimension)其中Y和其數組是實際最大值(例如[1 1 1 1 1]),I是最大值的索引(例如[ 1 2 3 4 5])

EDIT 如果desired_output = [1 1 1 1 1]',(一個列向量,音符轉置),則該命令這樣做是max(matrix,[],2)沿着第二維度操作。此行爲在help max中定義。

+0

@Ferdrick抱歉,我不明白你的回答。你能解釋嗎?desired_dimension是什麼?謝謝 – sima412

+0

如果我正確理解你的問題,那麼我想不出比@ dsgmt更好的答案。 – Frederick

+0

非常感謝你,是的,我認爲這是真的,但是你知道「2」是什麼在B = sort(sample,2,'descend')?如果我有一個矩陣100 * 100那麼這個代碼使用什麼? – sima412