我的情况是,我想图个标量数组A用手柄功能fun发送行向量的行向量,收购B,这样B(i,:) = fun(A(i,:)).
我能想到的最合理的解决方案如下:
temp = mat2cell(A,ones(1,size(A,1)),size(A,2));
B = cell2mat(cellfun(fun,temp,'UniformOutput',0));
Run Code Online (Sandbox Code Playgroud)
然而,向细胞和背部的转换似乎有点过分(并且可以说是计算上昂贵的).我也不清楚为什么cellfun会抱怨输出不均匀.是否有更有效的方式跳到脑海?
还有另一种解决方案采用accumarray. 虽然不像 那样花哨bsxfun,但它不需要声明辅助函数:
subs = ndgrid(1:size(A, 1));
B = accumarray(subs(:), A(:), [], @fun); %// @fun is the function handle
Run Code Online (Sandbox Code Playgroud)