1

我是信號處理領域的法國學生工程師,我在神經科學實驗室做實習。我必須藉助Matlab來處理大腦活動中的大量數據,因此我的主要任務之一是優化代碼。但是現在我陷入了一種無法解決的狀況,並且在網絡上找不到任何有關它的情況。我解釋我的問題:切斷信號(相互連接)並計算這些部分

例如矩陣A:

a = [ 1 2 3 4 5; 6 7 8 9 10;11 12 13 14 15] 

每一行是一個信號的DATAS(所以在這裏我們有3個信號),我想,每個信號/行,切blcoks中的矢量鏈接的長度相同。

例如對於信號1,S1 = [1 2 3 4 5]我想提取塊S1_1 = [1 2 3], S1_2 = [2 3 4], and S1_3 = [3 4 5]並計算每個子塊。

我的第一個想法是使用嵌套循環這樣的:

[nrow ncol] = size(a); 

for i = 1 : nrow 
    for j = 4 : ncol 
     sub_block = a(i, (j-3):j); 
     result(i, j-3) = compute(sub_block); 
    end 
end 

但正如我說我必須處理大量的DATAS的,所以我想避免的for循環。我正在尋找一種算法,這將能夠刪除這些for-loop,但我不知道該怎麼辦...

我看到了函數'reshape',但是這個給我的子塊如: S1_1 = [1 2 3], S1_2 = [4 5 6]我不能使用它,因爲這裏在子塊S1_2我有信號1和信號2的數據。

然後我看到函數'blockproc',但我真的不明白它是如何處理我並不真的說這個人可以幫我...

所以,我希望你明白我的問題,並且你可以幫助我或指示我找到一種解決方案。

回答

0

除了@Ziyao魏的建議,你可以選擇使用im2col

>> S = im2col(a', [3 1]) 
S = 

    1  2  3  6  7  8 11 12 13 
    2  3  4  7  8  9 12 13 14 
    3  4  5  8  9 10 13 14 15 

S(:, 3*k-2:3*k)k = 1:data_rows是你的數據(a)的k行所需的子塊。

0

非常感謝您的答覆!我沒有想到如此快速得到答案!

我有圖像處理工具箱和你不同的方法是偉大的!我必須使用im2col,因爲對我來說是「較慢」的解決方案,我可以刪除一個for-loop。

謝謝你的幫助