2012-01-20 3 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); 

Я уверен, должен быть гораздо более простым способом сделать это менее чем в трех строках. Мой код работает устройство отслеживания глаз на 1000Гц, и я хочу, чтобы избежать ненужной обработки ...

Любой мудрости с благодарностью получила

+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 и проверьте, действительно ли у вас проблема, прежде чем пытаться его оптимизировать. Готов поспорить, ни одно из них не может быть различимо на практике, и в этом случае вы можете придерживаться того, что наиболее читаемо.