данные, передаваемые при вызове пользовательской функции

Мне нужно проанализировать большой исходный код. Код содержит несколько вызовов функций. В зависимости от вычислений и связи между вызовами функций мне нужно будет найти наилучшую схему конфигурации для общего выполнения исходного кода.

По моему мнению,

Данные, передаваемые при вызове функции (если она находится на другом компьютере, сервере и т. д.) = Размер входных данных + Размер выходных данных

для получения размера входных данных и размера выходных данных, я думаю, мне следует переписать все функции, чтобы иметь переменное количество входных и выходных переменных.

[varargout] samplefunction(varargin) {

FOR i=0:nargin
 inputdata=inputdata+sizeof(varargin(i));



% Do stuff here


}

нет ли способа рассчитать размер массива ячеек (varargin/varargout) непосредственно в Matlab?

или если вы можете предложить другой подход для измерения передаваемых данных между вызовом функции?


person Ankur Gautam    schedule 12.06.2013    source источник
comment
идея состоит в том, чтобы получить доступ к рабочему пространству Matlab с помощью whos (var), но проблема в том, что у меня нет фактического имени переменной в теле функции. Любое предложение ?   -  person Ankur Gautam    schedule 13.06.2013


Ответы (1)


Вызов cellfun() со строковыми входными данными будет очень быстрым :

sizes = [cellfun('size',varargin,1); cellfun('size',varargin,2)];

or

lenghts = cellfun('length',varargin);

or

numels  = cellfun('prodofsize',varargin);
person Oleg    schedule 12.06.2013
comment
размеры = [cellfun('size',varargin)] Могу ли я использовать это, чтобы сразу получить сумму размеров? или используя size+= [cellfun('size',varargin,i)] в цикле? я собираюсь попробовать это, и дам вам знать в ближайшее время. Есть ли у вас какие-либо другие идеи для измерения степени связи между вызовами функций, помимо сосредоточения внимания на вводе и выводе? - person Ankur Gautam; 12.06.2013
comment
или любой подход, который не настаивает на том, чтобы я переписывал все функции с точки зрения переменного количества входов и выходов? - person Ankur Gautam; 12.06.2013
comment
размеры в первой строке указывают размер :( и мне нужен размер данных в битах или байтах :) - person Ankur Gautam; 12.06.2013
comment
Тогда вам нужно использовать s = whos. - person Oleg; 12.06.2013
comment
да .. но в теле функции у меня нет имени фактической переменной .. единственное, что у меня есть, это формальное. . поэтому нет способа получить доступ к рабочему пространству Matlab из тела функции через имя переменной, или даже он может быть не в состоянии получить файл с определением функции ... любое предложение? - person Ankur Gautam; 13.06.2013
comment
Зачем вообще нужно имя переменной inputname() . Разве вы не можете просто выполнить цикл для каждого содержимого varargin, назначить его temp, вызвать whos temp и получить потребление памяти? - person Oleg; 13.06.2013
comment
Да !! это было логично. я немного растерялся :) - person Ankur Gautam; 13.06.2013
comment
Но есть смысл... whos(varargin(1)) не работает, и если я сохраняю значение в новой переменной, например temp= varargin(1), а затем использую s=whos(temp), то s.bytes не является фактический размер данных ввода. Скорее это размер новой переменной. Для меня эти два значения значительно различаются. Я получаю 140 байт, когда должно быть около 8 байт. Надеюсь, вы поняли мою точку зрения .. И спасибо, что уделили время! - person Ankur Gautam; 13.06.2013
comment
Я думаю, это происходит потому, что varargin и varargout определены в Matlab с точки зрения массива ячеек, и, следовательно, дополнительная память потребляется для хранения данных в индексе ячеек? - person Ankur Gautam; 13.06.2013
comment
Вы должны назначить только содержимое временной переменной, то есть varargin{ii} (обратите внимание на фигурные скобки). И да, массив ячеек требует 112 байт служебных данных. - person Oleg; 13.06.2013