0

我的问题有两个部分:

  1. 将给定矩阵拆分为其列
  2. 这些列应该存储到一个数组中

例如,

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错误的分配和访问,请帮助我...

4

3 回答 3

1

真的,这听起来就像A你想要的——我无法想象你通过拆分它们获得任何东西的场景。但如果你这样做了,那么你最好的选择可能是一个单元阵列,即。

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

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

于 2012-09-05T01:22:05.970 回答
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).

于 2012-09-05T00:20:31.537 回答
0

在 Matlab 数组中,每个元素必须具有相同的类型。在大多数情况下,这是一个浮点类型。您的示例 A(:, 1) 是一个 4 x 1 数组。如果将其分配给 B(:, 2),则 B(:, 1) 也必须是 4 x 1 数组。

一个可能会让您感到困扰的常见错误是 4 x 1 阵列和 1 x 4 阵列不是一回事。一个是列向量,一个是行向量。尝试转置 A(:, 1) 以获得 1 x 4数组。

于 2012-09-05T00:07:25.613 回答