MATLAB中是否存在与SQL COALESCE
函数类似的函数。我希望该功能能够返回第一个现有的'所有论点的价值
例如,
clear A B; C=10; COALESCE(A,B,C)
应该返回C
的值(因为A
和B
未分配/不存在)。
我知道代码很容易,我只是在这里懒惰。但是,如果MATLAB没有类似的功能,我会感到惊讶。
答案 0 :(得分:0)
据我所知,没有内置功能。但是你可以轻松编写自己的。
请注意,在Matlab中无法传递在使用之前尚未定义的变量。因此,您建议的调用clear A B; C=10; COALESCE(A,B,C)
无效,将引发错误。相反,我们可以使用var=[]
定义一个空变量。
以下代码创建了两个空变量A
,B
并指定了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个变量)