【问题标题】:Convert the row of a matrix into a vector将矩阵的行转换为向量
【发布时间】:2016-04-01 03:04:45
【问题描述】:

我有我的矩阵“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]

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

谢谢

【问题讨论】:

  • 为什么你需要这样做?您可以使用冒号将行传递给您想要的任何函数,没有理由将它们分隔成唯一的变量。
  • Nonononono... 当A(1,:) 完全可用时,为什么要创建500 个新变量?并且更容易循环。
  • 我编辑了这个问题,所以我希望我的观点正确。
  • @JoseLGutierrezA 您的观点并不清楚,您需要这样做的原因是。您想要做的通常是糟糕的编程习惯,实际上没有必要这样做。
  • 我同意其他人的观点。您没有说明为什么需要将这些向量放在单独的变量中。每行都可用于通过数组索引进行的任何操作。也许如果你解释你的矢量处理?例如,假设您将第 33 行与第 55 行相乘,您可以使用 A(33, :).*A(55, :)

标签: matlab matrix vector size rows


【解决方案1】:

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

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

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

function assign( varname, val )
assignin('caller', varname, val );

顺便说一句:一个(稍微)更清洁的解决方案(不依赖于 eval 和 assignin)将是使用结构。即

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多