2013-03-21 73 views
0

我在MATLAB矩阵,就像这样:如何通用MATLAB矩阵导出到文本文件,格式如C#阵列

[ 1 2 3 4; 5 6 7 8; 9 10 11 12] 

我想将它导出到一个文本文件,在C#中的格式:

double[,] myMat = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; 

我需要一个MATLAB函数,称为例如exportMatrix(),有两个参数:

  • MATLAB的矩阵
  • 在这个矩阵必须出口的TIPO

如何使用此功能的两个例子如下:

exportMatrix(myMatrix1, 'short'); 
exportMatrix(myMatrix2, 'float'); 

我也需要,如果矩阵是多维的,功能应该将其正确导出。例如,如果:

>> size(A) 

ans = 

     100  10   3 

然后调用exportMatrix(A, 'double');的结果应该是:

double[, ,] A = {...}; 
+0

您可以使用[fprintf中(http://www.mathworks.se/help/matlab/ref /fprintf.html)来正确地格式化输出。 ([更多信息](http://www.mathworks.se/help/matlab/import_export/writing-to-text-data-files-with-low-level-io.html)) – 2013-03-21 12:16:52

回答

0

这是一个有趣的问题:)这里是一个起点:

function exportMatrix(A) 
% get dimensions 
dimensions = size(A); 
N_dim  = length(dimensions); 

% print variable declaration to console 
fprintf('double[') 
for i = 1:N_dim-1 
    fprintf(',') 
end 
% finish declaration and print rows of matrix 
fprintf('] A= {%s}\n', exportRow(A, dimensions)) 

function str_out = exportRow(B, dims) 
% recursively print matrix 

% init output string 
str_out = ''; 

% have we finished yet? 
if length(dims) > 1 
    % if not, then go to next layer 
    for i=1:dims(1) 
     % this test is just to make sure that we do not reshape a 
     % one-dimensional array 
     if length(dims) > 2 
      % print next slice inside curly-braces 
      str_out = sprintf('%s{ %s },', str_out, exportRow(reshape(B(i,:), dims(2:end)), dims(2:end))); 
     elseif length(dims) == 2 
      % we are almost at the end, so do not use reshape, but stil 
      % print in curly braces 
      str_out = sprintf('%s{ %s },', str_out, exportRow(B(i,:), dims(2:end))); 
     end 
    end 
else 
    % we have found one of the final layers, so print numbers 
    str_out = sprintf('%f, ', B); 
    % strip last space and comma 
    str_out = str_out(1:end-2); 
end 
% strip final comma and return 
str_out = sprintf('%s', str_out(1:end-1)); 

只适用于二维数组及更高版本。尝试例如。

exportMatrix(rand(2,2,2)) 

你需要的,如果你要打印到文件改变fprintf中陈述......

+0

这是一个很好的起点。您还可以使用另一个代表C#中的矩阵类型的输入来修改上述函数 – 2013-03-21 18:21:05