有没有办法立即将n x n
数值数组的元素转换为n x n
单元格数组,反之亦然,以便单元格数组中的每个单元格都有元素的行,列和值?例如,
Input:
A=[8 7 8 4 5;
7 0 7 4 4;
4 3 3 8 6;
7 0 10 8 7;
2 1 0 2 8;];
B=cell(5,5);
Output:
B{1}=[1 1 8];
B{2}=[2 1 7];
B{3}=[3 1 4];
B{4}=[4 1 7];
B{5}=[5 1 2];
B{6}=[1 2 7];
and so on...
答案 0 :(得分:1)
这是一种方法:
dim=length(A); %//square matrix
cols = repmat(1:dim,dim,1);
rows = cols';
B=reshape(num2cell([rows(:) cols(:) A(:)],2),dim,dim);
如果要经常使用它,可以将这段代码包装在函数中,以“立即”将矩阵的元素传输到单元格数组。
答案 1 :(得分:0)
也许使用arrayfun
[row, col] = ndgrid(1:size(A,1));
B=arrayfun(@(x,y,z) [x y z], row(:), col(:), A(:), 'uni', 0);
有趣的是,如果你使用
B=arrayfun(@(x,y,z) [x y z], row, col, A, 'uni', 0);
您获得的单元格数组B
的大小与A
相同,其中每个元素都在A
的相应元素中。