2014-03-06 11 views
1

我米從這個具有檢測揚聲器變化point`如何用較低的索引來表示上三角矩陣的較大索引,並根據那個想要改變矩陣標號的數目。 MATLAB

SCP=[10 25 43]; 

的矢量I在此之後由mtrix

seg_result= 
      start-time end-time 
speaker1 1   10 
speaker2 10   25 
speaker3 25   43 
speaker4 43   end-time of audio wav(for ex: 50) 

我沒有其中的均勻揚聲器clustering.result是在基體中其中下三角矩陣將始終爲零,矩陣如下,

cluster_result= 

0 -567 345 324 
0  0 567 768 
0  0  0 534 
0  0  0  0 

然後我檢測到矩陣中的負數。

for i=2:length(cluster_result) 
    for j=(i+1):length(cluster_result) 
     if cluster_result(i,j)<0 

在這裏cluster_result(I,J)的值,是指揚聲器(i)和揚聲器(J)間的距離的值,例如:cluster_result(1,2)指揚聲器1和揚聲器2之間的距離值。 。現在我得到了來自cluster_result的負數,我需要如下

1)這個負數的索引。 2),那麼我想我更換第j,意味着我要揚聲器2應該成爲speaker1.and要創建(或U可以說替代以前seg_result矩陣)如下

seg_result= 
      start-time end-time 
speaker1 1   10 
speaker1 10   25 
speaker3 25   43 
speaker4 43   end-time of audio wavfile(for ex: 50) 

你的幫助會由衷地讚賞...

+0

有什麼建議? – user3168654

+0

請更清楚地描述您的問題,您的期望結果應該如何? – thewaywewalk

回答

1

您可以通過以下方式使用find()

negatives= cluster_result<0; % Logical operation, returns a binary matrix with 1 where the expression is true/ exactly equivalent to your loop. 

輸出:

negatives= 
    0  1  0  0 
    0  0  0  0 
    0  0  0  0 
    0  0  0  0 

然後使用find()有兩個輸出,讓您的二元矩陣的非零元素的索引:

[ii,jj]=find(negatives); if you use only one output, you'll get a linear index 

輸出:

ii = 

    1 

jj = 

    2 

現在,你有你的索引iijj你可以根據您的喜好更換和重新排列它們。

希望有所幫助。

+0

謝謝你的答覆。這很好。我可以用ii代替jj。但是在這之後,看到第一個seg_result矩陣(在我問的問題中)應該變成最後一個seg_result矩陣(在我問的問題中給出)。 。揚聲器2被揚聲器1取代... – user3168654

+0

這取決於你如何生成矩陣。你可以編輯你的問題,解釋'seg_result'是怎麼樣的? – McMa