将包含不同长度向量的单元格保存到MATLAB中的文本文件中
我试图将包含不同长度列向量的单元格数组保存到MATLAB中的文本文件中,但我有点卡住了将包含不同长度向量的单元格保存到MATLAB中的文本文件中,matlab,text,vector,cell-array,Matlab,Text,Vector,Cell Array,我试图将包含不同长度列向量的单元格数组保存到MATLAB中的文本文件中,但我有点卡住了 cell_structure = {[1;2;3;...546] [1;2;3;...800] [1;2;3;...1011] [1;2;3;...1118] [1;2;3;...1678]} 我尝试使用以下代码: fid = fopen( 'myFile.txt', 'w' ) ; for cId = 1 : numel( cell_structure ) fprintf( fid, '%
cell_structure = {[1;2;3;...546] [1;2;3;...800] [1;2;3;...1011] [1;2;3;...1118] [1;2;3;...1678]}
我尝试使用以下代码:
fid = fopen( 'myFile.txt', 'w' ) ;
for cId = 1 : numel( cell_structure )
fprintf( fid, '%f ', cell_structure{cId} ) ;
fprintf( fid, '\r\n' ) ;
end
问题是,当我打开文本文件时,列向量保存为行向量,其长度限制为545。任何帮助都将不胜感激 for循环的第一次迭代以cell_结构打印整个第一个数组。这个数组是行向量还是列向量无关紧要,因为您使用的是fprintf(),它将一个接一个地打印每个元素 这比我现在在工作中能应付的要复杂一些。。。但是您需要填充较短的向量,以匹配最大向量的长度 然后: 这将为您提供一个包含所有列向量的数组
然后,使用空格分隔的
csvwrite()
来写入列。我使用了Elijah Rockers的想法来填充较短的列向量,因此它们的长度都相同。克劳利指出,dmlwrite和CVSWITE不能处理空电池。我发现了一个可以处理空单元格的函数:
这是我用来填充和保存数据的代码
for k = 1:max(cellfun('length',cell)); %longest column vector length
for j = 1:length(cell); % number of colum vctors
if k > length(cell{j}); % if the index is longer than colum vector length
new_cell{k,j} = []; % pad vector
else
new_cell{k,j} = cell{j}(k); %otherwise add to array
end
end
end
dlmcell('test.txt',new_cell,',')
它像一个符咒一样工作,单元格数组中的所有列向量现在都保存在文本文件的不同列中。您能给我们展示一个您想要的输出示例吗?您是否尝试过使用
'-append'
属性?@Crowley我尝试过使用dlmwrite('test.txt',cell{I},'-append'),然后递增I。但是,它将所有列向量添加到文本文件中的一列中,我希望单元格数组中的每个列向量都保存在文本文件中的各个列中。@jgrant我希望输出是一个以制表符分隔的文本文件,其中单元格数组中的每个列向量都保存在文本文件的各个列中。这里有一些误解。我尝试了你提到的代码,我得到了多行包含数字1,2,3,。。。在您的示例中,我只能看到行向量。列向量是[1;2;3;…]
。刚才看到您希望每个列向量有单独的列。。。让我试着解决这个问题,我会为将单元格结构定义为行向量的混乱感到抱歉,在现实生活中,它们是列向量。
for k = 1:max(cellfun('length',cell)); %longest column vector length
for j = 1:length(cell); % number of colum vctors
if k > length(cell{j}); % if the index is longer than colum vector length
new_cell{k,j} = []; % pad vector
else
new_cell{k,j} = cell{j}(k); %otherwise add to array
end
end
end
dlmcell('test.txt',new_cell,',')