MATLAB返回第一个非空参数的值(内置COALESCE函数)

时间:2015-06-26 18:51:06

标签: matlab function coalesce

MATLAB中是否存在与SQL COALESCE函数类似的函数。我希望该功能能够返回第一个现有的'所有论点的价值 例如,

clear A B; C=10; COALESCE(A,B,C)

应该返回C的值(因为AB未分配/不存在)。
我知道代码很容易,我只是在这里懒惰。但是,如果MATLAB没有类似的功能,我会感到惊讶。

1 个答案:

答案 0 :(得分:0)

据我所知,没有内置功能。但是你可以轻松编写自己的。

请注意,在Matlab中无法传递在使用之前尚未定义的变量。因此,您建议的调用clear A B; C=10; COALESCE(A,B,C)无效,将引发错误。相反,我们可以使用var=[]定义一个空变量。

以下代码创建了两个空变量AB并指定了C=10。在函数coalesce内部,我们假设所有变量都是空的。在for循环中,我们返回第一个非空变量。在没有for-loop的版本中,我们得到第一个非零元素的索引,然后如果存在非零元素则返回单元格的相应内容。

如果您希望从Matlab中的任何位置访问该功能,请参阅文档here

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个变量)