0

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

我尝试使用以下代码:

[x y] = mean(theArray);

...但是,这会返回

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

现在,我已经解决了这三行:

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

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

感激地接受任何智慧

4

2 回答 2

2

分两行:

x = mean(theArray(:,1));
y = mean(theArray(:,2));
于 2012-01-20T19:55:22.770 回答
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 分析器中,看看您是否真的有问题。我敢打赌,这些在实践中都无法区分,在这种情况下,您可以坚持使用最易读的内容。

于 2012-01-20T20:03:14.623 回答