2014-11-03 21 views
0

我目前正在使用Matlab函數進行實驗。基本上我試圖執行上以矩陣中發現的每個值的函數,如下面的簡單示例:對每個矩陣值執行一個函數

k = [1:100]; 
p = [45 60 98 100; 46 65 98 20; 47 65 96 50]; 
p(find(p)) = getSum(k, find(p), find(p) + 1); 

function x = getSum(k, f, g, h) 
x = sum(k(f:g)); 
end 

爲什麼對應的輸出矩陣值是所有3個,在爲什麼所有索引取決於第一換句話說計算的總和?

的輸出是下面的:

p = 

    3  3  3  3 
    3  3  3  3 
    3  3  3  3 
+0

您正在爲你的'p'矩陣中的所有元素分配一個標量('getSum'函數的輸出)的標量。 – 2014-11-03 19:59:17

+1

你想計算什麼?看起來,你有一個4x4的k(1:100)。你想總結什麼? – chappjc 2014-11-03 20:16:18

+0

這只是一個例子來說明爲索引任意數組的主要目的而將參數傳遞給函數的問題。我的主要目標不是執行總和,而是要實際找到一種合適的方式,通過這種方式我可以根據函數參數對數組進行索引,然後應用相應的結果(每次索引後獲得的結果(在此情況下爲總和)到每個矩陣單元。 – Bran 2014-11-03 20:30:24

回答

2

f:g返回f(1,1)g(1,1),所以1:2之間的值。

find(p)返回非零值的索引。由於所有的值都是非零的,你可以得到所有的指數。

因此,如果我們打破聲明p(find(p)) = getSum(k, find(p), fin(p) + 1)

我們得到

find(p) = 1:12 

然後我們得到 f = 1:12g = 2:13這導致k = 1:2(如上所述)

終於sum(1:2) = 3

此值適用在p(1:12),這是相同的p(:,:)(所有矩陣)

+0

感謝您的解釋。然而,是否有任何其他方式可以計算這樣的問題(即將參數傳遞給依賴於當前矩陣位置的函數,這將用於索引)?請注意,這是一個簡單的例子,以便說明將參數傳遞給用於索引的函數的概念。 – Bran 2014-11-03 20:24:53

+1

@Bran也許,你要找的是'arrayfun'。 – 2014-11-03 20:26:24

+0

@CapeCode arrayfun()是這樣做的一種方式,但不幸的是它在每次函數調用期間都會提供開銷。我正在尋找一種替代方法來加速通過矩陣操縱/索引修改每個單元格的過程... – Bran 2014-11-04 00:43:17

相關問題