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
如何替换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