将Matrix拆分为列向量并将其存储在数组中

时间:2012-09-04 23:55:53

标签: matlab matrix indexing split

我的问题分为两部分:

  1. 将给定矩阵拆分为列
  2. 这些列应存储在数组
  3. 例如

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

    现在,我知道第一部分的解决方案:

    通过获得列 tempCol = A(:,iter), where iter = 1:end

    关于问题的第二部分,我想(像这样,可能是对arraySplit数组的不同索引),但是一个完整的A列应该存储在splitArray中的单个索引中:

    arraySplit(1) = A(:,1)
    arraySplit(2) = A(:,2)
    

    依旧......

    示例矩阵A

    arraySplit(1)应该给我[ 1 3 4 6 ]'

    arraySplit(2)应该给我[ 3 5 5 8 ]'

    当我尝试将列向量分配给我的数组时,我收到以下错误。

    In an assignment  A(I) = B, the number of elements in B and I must be the same.
    

    我正在错误地分配和访问arraySplit,请帮帮我......

3 个答案:

答案 0 :(得分:1)

听起来A听起来像你想要的一样 - 我无法想象你通过分裂得到任何东西的情景。但如果你这样做,那么你最好的选择可能是一个单元阵列,即

C = cell(1,3);
for i=1:3
   C{i} = A(:,i);
end

编辑:请参阅下面的@ EitanT评论,以获得更优雅的方式。访问向量也使用与设置它相同的语法,例如v = C{2};会将A的第二列放入v

答案 1 :(得分:0)

在Matlab数组中,每个元素必须具有相同的类型。在大多数情况下,这是一种浮动类型。你的例子A(:,1)是一个4乘1的数组。如果将其分配给B(:,2),那么B(:,1)也必须是4乘1的数组。

可能咬你的一个常见错误是4 x 1阵列和1 x 4阵列相同。一个是列向量,一个是行向量。尝试转置A(:,1)以获得1 x 4行数组。

答案 2 :(得分:0)

您可以尝试以下内容:

A = [1 3 5; 
3 5 7;
4 5 7;
6 8 9]

arraySplit = zeros(4,1,3);

for i =1:3
    arraySplit(:,:,i) = A(:,i);
end

然后调用arraySplit(:,:,1)来获取第一个向量,但这似乎是一个不必要的步骤,因为您可以通过访问与A(:,1)完全相同的值来做到这一点。