Scalar max of cell array with structure
3 次查看(过去 30 天)
显示 更早的评论
I have a cell array "myCell" with 2 dimensions and each cell has a 2D matrix and I'd like to obtain scalar value of the maximum for a given structure among all the cell dimensions. I assume bsxfun can do this but my goal doesn't match they way that I normally see bsxfun get used.
Currently I get the max (of the abs) looping through each cell dimension, grabbing the max for all elements in that cell's structure I need, assign the (scalar) max to elements in a matirx which shares the cell array dimensions, then tak the max of the matrix with (:) as shown below.
peak_FcRn(noFc,noRa)=0; % each cell array has structure, whose maxes I want to compare
for iFc=1:noFc
for iRa=1:noRa
% get the maximum absolute value of the current cell array's structure
% called noise (myCell{iRa,iFc}.noise--2 or 3d array)
peak_FcRn(iFc,iRa) = max(abs(myCell{iRa,iFc}.noise(:))); % a scalar value
end
end
% the
peak = max(peak_FcRn(:)); %
This gets the right answer but I would really like a one- or two-liner that can get the max of the cell's structure elements--and I have a feeling bsxfun can do it!
In the laziest way I would type
peak = max(abs(myCell{:,:}.noise(:))) % or perhaps
peak = max(abs(myCell{:}.noise(:)))
Thanks for your input,
Michael B.
采纳的回答
James Tursa
2020-5-4
If you reshape the input first, a one-liner version of your code:
peak = max(cellfun(@(x) max(abs(x.noise(:))),myCell(:)));
3 个评论
James Tursa
2020-5-4
编辑:James Tursa
2020-5-4
The myCell(:) reshapes myCell into a column vector and passes that into cellfun( ), which in turn creates the output with the same shape as the input ... a column vector. Since the output is now already a column vector, no need to reshape it again before taking max( ).
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!