我试图将包含不同长度列向量的单元格数组保存到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, '%f ', cell_structure{cId} ) ;
fprintf( fid, '\r\n' ) ;
end
问题是当我打开文本文件时,列向量被保存为行向量,并且它们的长度限制在545。任何帮助都将不胜感激。
发布于 2016-05-12 18:33:59
我使用了以利亚·罗克斯的想法,把较短的列矢量移出,所以它们都是一样长的。克劳利指出,dmlwrite和cvswrite不能处理空单元格。我找到了一个可以处理空单元格的函数:
https://github.com/mkoohafkan/UCBcode-Matlab/blob/master/OtherPeoplesFunctions/dlmcell.m
这是我的代码,用来填充和保存数据。
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,',')
它的工作原理就像符符一样,单元格数组中的所有列向量现在都保存在文本文件的单独列中。
发布于 2016-05-12 16:22:15
for
循环的第一次迭代以cell_structure格式打印整个第一个数组。这个数组是行还是列向量并不重要,因为您使用的是fprintf(),它将逐个打印出每个元素。
这比我现在在工作中所能应付的更棘手.但是你需要把你的更短的向量与你最大的长度相匹配。
然后:
for k = 1:size_of_largest_vector
for j = 1:total_number_of_columns
new_cell{k,j} = cell_structure{j}(k)
end
end
这将为您提供所有列向量的数组。
然后,使用以空格分隔的csvwrite()
来编写列。
https://stackoverflow.com/questions/37191870
复制相似问题