将矩阵转换为单行表示以进行复制和粘贴

时间:2015-04-11 18:18:44

标签: matlab

假设我的输出是一个大数组,比如500x4。 我想将此数组转换为代码形式以创建相同的数组。 一个例子:

output_array = randn(2,3)
output_array =
   -0.2408   -0.9390    1.1794
   -0.9064    0.1178   -0.4643

我想获得:

input_array = [-0.2408   -0.9390    1.1794; -0.9064    0.1178   -0.4643]

对于低维度,手动工作很容易,但我可以获得任意矩阵的输入代码。

感谢。

1 个答案:

答案 0 :(得分:1)

这是一种方式:

a = randi(2,3)

linespec = [repmat('%d ',1,size(a,2)) '; ']
spec = strrep(['[ ' repmat(linespec,1,size(a,1)) ' ]'],';  ','')
b = sprintf(spec,a(:) )

a =

     2     2     1
     1     1     1
     1     2     2


linespec =

%d %d %d ; 


spec =

[ %d %d %d ; %d %d %d ; %d %d %d ]


b =

[ 2 1 1 ; 2 1 2 ; 1 1 2 ]

请注意,' ... '代码段中定义的空格数量很重要!


使用:

spec = ['b = ' strrep(['[ ' repmat(linespec,1,size(a,1)) ' ]'],';  ','') ]

得到:

b =

b = [ 1 2 2 ; 1 2 2 ; 1 2 1 ]

将所有内容包装到函数中可能会很有趣:

function [ out ] = Matrix2String( a )

varname = inputname(1);

linespec = [repmat('%d ',1,size(a,2)) '; '];
spec = [varname ' = ' strrep(['[ ' repmat(linespec,1,size(a,1)) ' ]'],';  ','') ];
out = sprintf(spec,a(:) );
end

这样的电话:

a = randi(2,3)
Matrix2String(a)

然后会返回:

ans =

a = [ 2 1 1 ; 2 1 2 ; 1 1 1 ]