MATLAB:一行的总和

时间:2012-01-20 19:36:22

标签: matlab mean

我正在尝试简化我的代码。我有一个2列数组,我想从中提取列的平均值并将它们存储为X和Y.

我尝试使用以下代码:

[x y] = mean(theArray);

...但是,这会返回

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

目前,我已经确定了三条线:

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

我确信必须是一种更简单的方法,可以在不到三行中完成此操作。我的代码运行1000Hz的眼动追踪设备,我想避免任何不必要的处理......

感激地接受任何智慧

2 个答案:

答案 0 :(得分:2)

分两行:

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

答案 1 :(得分:1)

您的代码已经非常简单了。您可以使用此类或类似的内联阵列重新排列代码在单行中执行此操作。

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

但从效率的角度来看,你原来的三衬里可能更好。在mean调用之前将阵列拆分将分配更多内存,并需要额外mean()次呼叫。您可以将其缩减为两行而没有额外的内存和mean()

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

但这真的只是完成与原始代码相同的事情,在运行时支付额外的函数调用以在纸上保存一行。

将您的代码放在带有profile on的Matlab分析器中,并在尝试优化之前查看您是否确实遇到了问题。我敢打赌,在实践中,这些都不是可区分的,在这种情况下,你可以坚持使用最具可读性的东西。