如何替换matlab函数cellfun
y = cellfun(@(x) x/sum(x(:)), y, 'UniformOutput',0);
y = cellfun(@sqrt, y, 'UniformOutput',0);
带循环。我想将此代码转换为Scilab,但我不明白cellfun对x的作用。你能用C或Java(或其他语言)形式编写一些等效的代码吗?
答案 0 :(得分:2)
执行
yout=cell(size(y));
for k=1:numel(y)
yout{k}=sqrt(y{k}/sum(y{k}(:)));
end
y=reshape(yout,size(y));
说明:第一次调用cellfun
将遍历原始单元格y
的每个元素,然后将函数@(x) x/sum(x(:))
应用于单元格的每个元素(即它将标准化每个单元元素使得它们各自的元素和等于1)。结果存储在输出单元的相应元素中。第二个调用对sqrt
函数执行相同的操作,因此我们可以在循环中将同一命令中的两个操作联合起来。
一些证据:
y={[1 2], [3 4]; [5 6], [7 8]; [9 10], [11 12]};
yout1 = cellfun(@(x) x/sum(x(:)), y, 'UniformOutput',0);
yout1 = cellfun(@sqrt, yout1, 'UniformOutput',0);
yout2=cell(size(y));
for k=1:numel(y)
yout2{k}=sqrt(y{k}/sum(y{k}(:)));
end
yout2=reshape(yout2,size(y));
isequal(yout1,yout2) %returns 1