cellfun(@(x) x/sum(x(:)), y, 'UniformOutput',0) 的等价物是什么?

What is the equivalent of cellfun(@(x) x/sum(x(:)), y, 'UniformOutput',0)?

如何替换Matlab函数cellfun

y = cellfun(@(x) x/sum(x(:)), y, 'UniformOutput',0);
y = cellfun(@sqrt, y, 'UniformOutput',0);

有循环。我想将此代码转换为 Scilab,但我不明白 cellfun 对 x 做了什么。你能用 C 或 Java(或其他语言)形式编写一些等效代码吗?

执行

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