Extract upper diagonal half in a large cell array and replace rest with NaN

Hello,
I have a very large cell array and want to select upper diagonal from it and replace the rest with NaNs. For example, if I have a 5x5 cell array, I'd like to get a result similar to;
1,1 1,2 1,3 1,4 1,5
2,1 2,2 2,3 2,4 NaN
3,1 3,2 3,3 NaN NaN
4,1 4,2 NaN NaN NaN
5,1 NaN NaN NaN NaN

 采纳的回答

A=[1 2 3 4; 5 6 7 8; 9 10 11 12;13 14 15 16]
ii=ones(size(A))
idx=rot90(tril(rot90(ii)),-1);
A(~idx)=nan

4 个评论

tril and triu does not work on cell arrays, otherwise this would have been simple. I have a very large cell array with each cell containing numeric arrays of different sizes.
or without cell2mat
A={1 2 3 4; 5 6 7 8; 9 10 11 12;13 14 15 16}
ii=ones(size(A))
idx=rot90(tril(rot90(ii)),-1);
A(~idx)={nan}
Thank you, that is what I was looking for without loops.

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Cell Arrays 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by