将包含不同长度向量的单元格保存到 MATLAB 中的文本文件
Save cell containing different length vectors to text file in MATLAB
我试图将包含不同长度列向量的元胞数组保存到 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。任何帮助将不胜感激。
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
这将为您提供所有列向量的数组。
然后,使用 space 分隔的 csvwrite()
来编写列。
我使用 Elijah Rockers 的想法来填充较短的列向量,使它们的长度都相同。并且 Crowley 指出 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,',')
它就像一个魅力,元胞数组中的所有列向量现在都保存在文本文件的单独列中。
我试图将包含不同长度列向量的元胞数组保存到 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。任何帮助将不胜感激。
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
这将为您提供所有列向量的数组。
然后,使用 space 分隔的 csvwrite()
来编写列。
我使用 Elijah Rockers 的想法来填充较短的列向量,使它们的长度都相同。并且 Crowley 指出 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,',')
它就像一个魅力,元胞数组中的所有列向量现在都保存在文本文件的单独列中。