将2D阵列的元素转换为单元阵列

时间:2015-05-27 19:39:13

标签: matlab

有没有办法立即将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...

2 个答案:

答案 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的相应元素中。