Matlab 更改单元格数组的格式
我有一个Matlab 更改单元格数组的格式,matlab,matrix,cell-array,Matlab,Matrix,Cell Array,我有一个a,它是640x1单元格,其中每个单元格a(I,1)的值因行而异,例如: A(1,1)=[] A(2,1)=[1] A(3,1)=[1,2,3] 我想做的是将A转换成这样: A(1,1)=[] A(2,1)=1 A(3,1)=1; A(3,2)=2; A(3,3)=3 这样每个单元格只有一个值。如果有人能帮助我,我该怎么做?这是whoa的一部分 A= [] 0 0 0 145 [144;192] [145;197;307] 例如: % first lets create some
a
,它是640x1单元格,其中每个单元格a(I,1)
的值因行而异,例如:
A(1,1)=[]
A(2,1)=[1]
A(3,1)=[1,2,3]
我想做的是将A
转换成这样:
A(1,1)=[]
A(2,1)=1
A(3,1)=1; A(3,2)=2; A(3,3)=3
这样每个单元格只有一个值。如果有人能帮助我,我该怎么做?这是whoa
的一部分
A=
[]
0
0
0
145
[144;192]
[145;197;307]
例如:
% first lets create some random cellarray containing data of different length
A = cell(10,1);
for i=1:numel(A)
A{i} = rand(1,randi([0 5]));
end
% determine the maximum number of columns
colnum = max(cellfun(@numel, A));
% create new cellarray, and fill each row
B = cell(numel(A),colnum);
for i=1:numel(A)
if isempty(A{i}), continue; end
B(i,1:numel(A{i})) = num2cell(A{i});
end
因此,我将第一个单元格数组设置为:
>> celldisp(A)
A{1} =
0.2217 0.1174 0.2967 0.3188
A{2} =
0.5079 0.0855
A{3} =
0.8010
A{4} =
[]
A{5} =
0.7303 0.4886 0.5785 0.2373 0.4588
A{6} =
0.5468 0.5211 0.2316 0.4889 0.6241
A{7} =
0.3955 0.3674 0.9880 0.0377
A{8} =
0.9133 0.7962 0.0987 0.2619 0.3354
A{9} =
0.1366 0.7212 0.1068 0.6538
A{10} =
0.7791 0.7150
结果变成:
>> B
B =
[0.2217] [0.1174] [0.2967] [0.3188] []
[0.5079] [0.0855] [] [] []
[0.8010] [] [] [] []
[] [] [] [] []
[0.7303] [0.4886] [0.5785] [0.2373] [0.4588]
[0.5468] [0.5211] [0.2316] [0.4889] [0.6241]
[0.3955] [0.3674] [0.9880] [0.0377] []
[0.9133] [0.7962] [0.0987] [0.2619] [0.3354]
[0.1366] [0.7212] [0.1068] [0.6538] []
[0.7791] [0.7150] [] [] []
其中,我们以二维单元数组的形式访问元素:
>> B{5,3}
ans =
0.5785
编辑: 下面是一个稍微不同的实现:
len = cellfun(@numel, A);
padding = arrayfun(@(n)cell(1,n), max(len)-len, 'UniformOutput',false);
B = cellfun(@num2cell, A, 'UniformOutput',false);
B = cellfun(@(b,pad) [b{:} pad], B, padding, 'UniformOutput',false);
B = cat(1, B{:});
编辑2: 请注意,上面的命令将返回一个2D单元格数组。这是因为常规数字矩阵不能交错(所有行必须具有相同的长度) 如果要获得2D数值矩阵,则必须插入
NaN
值作为填充:
C = B;
C(cellfun(@isempty,C))= {NaN};
C = cell2mat(C)
输出:
>> C
C =
0.2217 0.1174 0.2967 0.3188 NaN
0.5079 0.0855 NaN NaN NaN
0.8010 NaN NaN NaN NaN
NaN NaN NaN NaN NaN
0.7303 0.4886 0.5785 0.2373 0.4588
0.5468 0.5211 0.2316 0.4889 0.6241
0.3955 0.3674 0.9880 0.0377 NaN
0.9133 0.7962 0.0987 0.2619 0.3354
0.1366 0.7212 0.1068 0.6538 NaN
0.7791 0.7150 NaN NaN NaN
谢谢你的回答。这是一个显示
a
@user1460166的链接:好的,试试新版本,我修复了这两个实现。是否可以检查此链接中的问题,其中C的格式将是您在此解决方案中提供的格式