2012-01-20 41 views
0

我想簡化我的代碼。我有一個2列陣列從中我想提取的列的平均值和它們存儲爲X和Y.MATLAB:一行的總和

我使用以下代碼的嘗試:

[x y] = mean(theArray); 

...然而,這將返回

??? Error using ==> mean 
Too many output arguments. 

現在,我已經解決與三線:

coords = mean(theArray); 
x = coords(1); 
y = coords(2); 

我敢肯定有必須是是一個更簡單的方式,在少於三行的情況下執行此操作。我的代碼運行在1000Hz的眼睛跟蹤設備,我想避免任何不必要的處理...

任何智慧感激地接受

+0

您是否有理由相信三線版本性能不佳?你測過它了嗎? –

回答

2

在兩行:

x = mean(theArray(:,1)); 
y = mean(theArray(:,2)); 
1

您的代碼已經是相當不錯的簡單。您可以使用此類或類似的內聯陣列重新排列代碼以單線形式進行操作。

[x,y] = deal(mean(theArray(:,1)), mean(theArray(:,2))); 

但效率方面,您原來的三班輪可能會更好。在mean呼叫之前拆分陣列將分配更多內存,並花費額外的mean()呼叫。你可以把它分成兩行,沒有額外的內存和mean()

tmp = mean(theArray); 
[x,y] = deal(tmp(1), tmp(2)); 

但是,這真的只是完成同樣的事情,你的原代碼,要在運行時的附加功能調用保存在紙上的線。

把你的代碼放在Matlab分析器中profile on,然後在嘗試優化之前看看你是否真的有問題。我敢打賭,在實踐中這些都不是可區分的,在這種情況下,你可以堅持最可讀的。