Насколько я знаю, встроенной функции для этого нет. Но вы можете легко написать свой собственный.
Обратите внимание, что в Matlab невозможно передать переменную, которая не была определена до ее использования. Поэтому предложенный вами вызов clear A B; C=10; COALESCE(A,B,C)
недействителен и вызовет ошибку. Вместо этого мы можем определить пустую переменную, используя var=[]
.
Следующий код создает две пустые переменные A
, B
и присваивает C=10
. Внутри функции coalesce
мы вначале предполагаем, что все переменные пусты. В цикле for мы возвращаем первую непустую переменную. В версии без цикла for мы получаем индекс первого ненулевого элемента, а затем возвращаем соответствующее содержимое ячейки, если ненулевой элемент существует.
Если вы хотите, чтобы функция была доступна из любой точки Matlab, см. документацию здесь а>.
function testcoalesce
A = [];
B = [];
C = 10;
COALESCE(A,B)
COALESCE(A,B,C)
end
% with for-loop (much faster)
function out = COALESCE(varargin)
out = [];
for i = 1:length(varargin)
if ~isempty(varargin{i})
out = varargin{i};
return;
end
end
end
% without for-loop (slower)
function out = COALESCE(varargin)
out = [];
ind = find(cellfun('isempty', varargin)==0, 1);
if ~isempty(ind);
out = varargin{ind};
end
end
Результат ожидаемый:
ans =
[]
ans =
10
Синхронизация двух функций показала, что первое решение с использованием цикла for примерно на 48% быстрее, чем функция без цикла.
(10 выборок, 1 000 000 итераций, 3 переменных и 20 переменных)< / суп>
person
Matt
schedule
26.06.2015