如何将通用MATLAB矩阵导出为文本文件,格式类似于C#数组
我在MATLAB中有一个矩阵,如下所示:如何将通用MATLAB矩阵导出为文本文件,格式类似于C#数组,c#,matlab,export,C#,Matlab,Export,我在MATLAB中有一个矩阵,如下所示: [ 1 2 3 4; 5 6 7 8; 9 10 11 12] 我想将其导出为C#格式的文本文件: 我需要一个MATLAB函数,例如调用exportMatrix(),带有两个参数: MATLAB矩阵 必须导出此矩阵的tipo 如何使用此功能的两个示例如下: exportMatrix( myMatrix1, 'short'); exportMatrix( myMatrix2, 'float'); 我还需要,如果矩阵是多维的,函数应该正确地导出它。例
[ 1 2 3 4; 5 6 7 8; 9 10 11 12]
我想将其导出为C#格式的文本文件:
我需要一个MATLAB函数,例如调用exportMatrix()
,带有两个参数:
- MATLAB矩阵
- 必须导出此矩阵的tipo
exportMatrix( myMatrix1, 'short');
exportMatrix( myMatrix2, 'float');
我还需要,如果矩阵是多维的,函数应该正确地导出它。例如,如果:
>> size(A)
ans =
100 10 3
然后调用exportMatrix的结果(A,'double')代码>应为:
double[, ,] A = {...};
这是一个有趣的问题:)这里是一个起点:
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语句…您可以使用它正确格式化输出。这是一个很好的起点。您还可以使用另一个表示C中矩阵类型的输入来修改上述函数#
exportMatrix(rand(2,2,2))