将矩阵的行转换为向量

时间:2015-12-26 17:38:20

标签: matlab matrix vector size rows

我有我的矩阵" A"用户定义其大小,例如,用户为矩阵A:

定义大小3x5
   [1 2 3 4 5]
A= [2 4 6 8 3]
   [2 4 5 7 8]

我需要将行转换为新的向量,如下所示:

A1=[1 2 3 4 5]
A2=[2 4 6 8 3]
A3=[2 4 5 7 8]

但问题是,由于用户可以修改矩阵的大小(添加/删除行),我需要采用向量。例如,用户将矩阵A的新大小定义为5x5,因此我需要

A1=[...]
A2=[...]
...
A5=[...]

我不想手动放置新的矢量,因为行数可能变得太大(大约500或更多)并且手动放置每个新矢量几乎是不可能的。所以我需要MatLab自动执行此操作。

我有一个矩阵,我需要行,但每行必须是一个向量,因为我需要分别计算每个向量。

我有这个示例代码

dim=5;            % Define by User 
dim1=15*dim;

A=[];
B=[];
x=round(rand(dim1));

for i=1:dim
    A(i,1)=x(i); 
end

for i=1:dim1
    B(i,1)=x(i+1);
end

B=vec2mat(B,15);

我有矩阵B,但是我需要把它的行放在一个单独的向量中:

B1= B(1,:)
B2= B(2,:)
...
B5=B(5,:)

问题是 dim 可能是500或更多,并且非常难以手动编写这么多的矢量。所以我需要帮助做循环。

----------------编辑--------------

问题在于:

用户定义矩阵,例如:

   [1 2 3 4 5]
A= [2 4 6 8 3]
   [2 4 5 7 8]

因此,程序必须向我显示不同向量中的行

A1=[1 2 3 4 5]
A2=[2 4 6 8 3]
A3=[2 4 5 7 8]

如果用户给我其他矩阵

   [1 2 3 4 5]
   [2 4 6 8 3]
A= [2 4 5 7 8]
   [4 5 6 6 7]
   [8 2 3 3 1]

该程序必须告诉我

A1=[1 2 3 4 5]
A2=[2 4 6 8 3]
A3=[2 4 5 7 8]
A4=[4 5 6 6 7]
A5=[8 2 3 3 1]

用户定义的矩阵行的范围在30到1200之间。因此,我需要MatLab自动生成每行的向量。

我尝试用这种方式定义每个向量:

AA = sym('A%d', [rows 1]);

所以我有A1,A2,A3等...之后,我可以做(最后一个例子)

A1=[1 2 3 4 5]
A2=[2 4 6 8 3]
A3=[2 4 5 7 8]
A4=[4 5 6 6 7]
A5=[8 2 3 3 1]

但是,我不知道如何制作这个循环。

谢谢

1 个答案:

答案 0 :(得分:0)

分配给具有不同名称的变量的唯一方法是使用命令eval或assignin。使用任何一种都通常表明编程实践不好(但这是由于您的问题陈述 - 它只能通过这两个命令来解决)。如果你真的坚持用不同的名字创建个别变量,我更喜欢这里的assignin方法:

for ii=1:size(A,1)
   assign( ['A' num2str(ii)], A(ii,:) );
end

将以下代码放在assign.m文件中

function assign( varname, val )
assignin('caller', varname, val );
BTW:一个(稍微)更清洁的解决方案(不依赖于eval和assignin)将使用结构。即。

S = struct;
for ii=1:size(A,1)
   S.(['A' num2str(ii)]) = A(ii,:);
end

现在包含S.A1,S.A2等。