2013-09-28 107 views
0

仍嘗試掌握Matlab的基礎知識。多次調用數組上的函數

我有一個函數f,它需要一個矩陣A和兩個數字(max和delta)作爲參數。

我還有一個函數g,它取一個矩陣A和一個數字閾值並返回一個矩陣B,如果A中元素的值大於或等於閾值,則B中的對應值應爲1,如果它小於或等於-threshold,則應該是-1,否則爲0.原始矩陣不應該在函數f也不在g中變化。

我希望函數f在調用g時爲閾值嘗試不同的值,並且我希望每次調用的結果在新矩陣中水平排列。

我不知道如何做到這一點的函數f,我猜最簡單的方法是創建一個數組:

t1= [-threshold:delta:threshold]; 

,但我怎麼叫g下在元素的每個值數組並將它們排列在一個新數組中?

function B = f(A, threshold, delta) 
    t1= [-threshold:delta:threshold]; 
    %What to write here? 
end 

function B = g(A, threshold) 
    B=(A>=threshold)-(A<=-threshold); 
end 

如果

A=[[-3:-1]' [1:3]'] 

然後

f(A, 2, 1) 

應返回相同矩陣作爲命令[[-1 -1 0] '[0 1 1]'[-1 - 1 0]'[0 1 1]']

回答

1

你想要的是一個loop statementfor loop會在這裏表現不錯。

至於襯並排陣列側,只需創建大小合適的數組:

h = size(A,1); 
w = size(A,2); 
result = zeros(h , w*floor(2*threshold/delta)); 

然後,在每次迭代索引正確的區段:

result(:,((i*w):((i+1)*w)+1) = g(A, -threshold+delta*i); 

雖然,我必須說,存儲數據有點奇怪,最好使用單元陣列或3D矩陣,如下所示:

result = zeros(h , w , floor(2*threshold/delta)); 

result(:,:,i+1) = g(A, -threshold+delta*i); 
+0

謝謝。 爲什麼存儲數據是一種奇怪的方式?我有許多信號存儲在A中,我想嘗試在不同的閾值下對它們進行離散化,並查看與目標信號的相關性是否更高。對我來說,將它們排列在一起然後與矢量進行關聯是有意義的。它還是奇怪嗎? – user1661303

+1

如果它符合您的目的,它就沒有問題,它只是使數據難以訪問,正如您在我的答案中的第二個代碼塊中所看到的,索引變得非常難看,再加上您需要知道單個數據的寬度設置,在第四塊的索引更簡單,它是'result(x座標,y座標,閾值索引)'。你如何做相關? – pseudoDust