【问题标题】:create new vectors from columns of an existing matrix从现有矩阵的列创建新向量
【发布时间】:2012-07-28 11:41:48
【问题描述】:

我想从现有矩阵的列中创建新向量。我的代码如下:

Matrix=[1 2 3;4 5 6;7 8 9];
A=Matrix(:,1);
B=Matrix(:,2);
C=Matrix(:,3);

我发现这段代码不是很优雅,特别是如果我有大量的列,这就是为什么我要寻找类似的东西:

[A B C]=Matrix;

但是Matlab说矩阵不能赋值给多个值。还有其他方法吗?

【问题讨论】:

    标签: matlab vector matrix assign


    【解决方案1】:

    您为什么要这样做? (只是好奇)Matlab 旨在处理矩阵。因此得名 Matrix 实验室……但遗憾的是,它仍然是可能的。

    我确信有一个更优雅的解决方案,但我会让你思考一下。这应该能让你继续前进。

    Matrix=[1 2 3;4 5 6;7 8 9];
    
    for i=1:size(Matrix,2) %number of rows
      eval(sprintf('A%d = Matrix(:,i)', i));
    end
    

    A1 =

     1
     4
     7
    

    A2 =

     2
     5
     8
    

    A3 =

     3
     6
     9
    

    【讨论】:

    • 矩阵在外部服务器生成的文件中给出。该文件还包含许多不同的数据。我想提取“有用”的向量并重命名它们,以便其他人可以(从向量名称)理解我正在编程的内容。
    • 好的,您可能还想考虑使用元胞数组作为一种可能性。
    • 在这种情况下,我会允许这种变量分离。 Op自己说原始矩阵只是一个大文件中的大量数据
    • 我现在明白了,只是在第一次提出问题时没有这些信息。
    【解决方案2】:

    使用mat2cell 拆分原始矩阵并使用deal 将拆分后的数据分配给结果变量A、B 和C:

    m = mat2cell(Matrix,size(Matrix,1),ones(1,size(Matrix,2)))
    [A,B,C] = deal(m{:})
    

    不幸的是,需要中间变量(但是如果您喜欢单行,可以使用 FEX 函数 dealcell 解决此问题)

    【讨论】:

    • mat2cell 和姐妹们似乎对我很有用。我会深入了解它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 2021-08-08
    • 1970-01-01
    相关资源
    最近更新 更多