Вопрос по syntax, return-value, matlab – подавление выходных переменных в Matlab

0

Я использую функцию с несколькими выходами в Matlab, но меня интересует только один из выходов. Я хотел бы подавить другие выходные переменные (то есть избежать их возврата и помещения в память). Например, с функцией max:

[output1 output2] = max(matrixA, [], 1);
% output1 returns the maximum, which i'm not interested in
% output2 returns the index of the maximum, which i *am* interested in

Есть ли способ вызвать функцию, чтобы output1 не возвращался? И если есть, то предлагает ли он какое-либо преимущество в памяти по сравнению с вычислениями, как указано выше, но немедленно вызываетclear output1 удалить output1 из памяти?

Спасибо за вашу помощь.

@ reve_etrange: Полагаю, если вы действительно хотите избежать ненужных вычислений, вам придется спроектировать свою функцию так, чтобы она возвращаласьvarargout аргументы и переписать его, чтобы вычисление выполнялось только в том случае, если было передано достаточно выходных аргументов (определяется с помощьюnargout значение) Amro
@Amro Единственная разница, кажется, заключается в упоминании соображений производительности, хотя, насколько я могу судить, их нет. reve_etrange
@Amro К счастью, такой подход не сложен. Это слишком плохо, хотя JIT-компилятор кажется отличным местом для этого. reve_etrange

Ваш Ответ

2   ответа
5

Используйте тильду:

[~, output2] = max(matrixA, [], 1);

Я сомневаюсь, что было бы много преимуществ памяти (кроме клерикальных вещей, таких как распределение выходных переменных и т. Д.), Поскольку функция будет работать полностью и выделять все, что ей нужно. Таким образом, вы просто не получаете значение и значение первой выходной переменной в области действияmax функция будет сборщиком мусора.

Не знал об этом - спасибо, что указал на это! Что люди делали до 2009b?
Видеть этоquestion (из которых это, кажется, дубликат). У одного из ответов есть альтернатива.
@Ansari: что OP сделал ^^, очистив ненужные переменные после вызова
Обратите внимание, что это не будет работать в старых версиях Matlab. Я считаю, что это реализовано примерно с R2009b ...
@Ansari Используйте переменную с именем DUMMY или что-то подобное
2

~ персонаж.

Например.

[~,I] = max(matrix);

Эта модель имеет преимущество передclear тем, что интерпретатор MATLAB и компилятор Just-in-Time могут избежать затрат памяти и ЦП при вычислении игнорируемых переменных.

Edit

Здесьдокументация иСообщение блога Лорен Шуре об этом использовании~, Я не могу найти какую-либо определенную информацию об использовании игнорируемых переменных для устранения ненужных вычислений.

Похожие вопросы