导出名称为行的矩阵

时间:2018-07-19 04:39:13

标签: matlab struct

我在从Matlab编写双重对象时遇到问题。

我有一个名为F的结构,其中有两个对象:F.data是大小为190*100000的双精度对象,而F.labels是大小为{ {1}}。我想要做的是将标签添加到double对象,并将其写入csv文件中。我正在使用190*1进行导出,并且我在MATLAB中是新手,所以我宁愿提供一个简单的解决方案,但这不是强制性的。

我还尝试使用csvwrite()vertcat以便稍后将其粘贴到我的double对象中,但是失败了。

非常感谢您。

1 个答案:

答案 0 :(得分:0)

csvwrite及其更强大的相对符号dlmwrite将仅将数字矩阵写入文件-它们不适用于混合的数字和文本数据。

我认为,保存混合数据的最佳方法是使用table

% Generate example numeric data
F.data = rand(190, 100000);
% Generate example row labels
F.labels = arrayfun(@(x) sprintf('Row%d', x), 1:size(F.data, 1), 'UniformOutput', false).';

% Put the data in a table
T = array2table(F.data, 'RowNames', F.labels);
% Write the table to a csv file, including row labels but not column labels
writetable(T, 'myoutput.csv', 'WriteRowNames', true, 'WriteVariableNames', false)

请注意:

  • 您将无法在Excel中打开此CSV文件,因为Excel只能处理16384列
  • 至少在我的计算机上,创建表的速度相当快,但是如果您不小心要求MATLAB显示该表-例如,通过在行的末尾省略分号-它将挂断几分钟或更长时间(我厌倦了等待,并使用^ C取消了它。)

要执行此操作,您将需要足够的可用内存来将整个数组复制到表结构中,该结构比原始数组需要更多的空间。如果这是一个问题,您将不得不考虑遍历数据和标签数组,并使用low-level file I/O functions来一次格式化和写入一行。