从矩阵的每列创建一个数组

时间:2016-03-05 23:08:16

标签: matlab

我有一个14 x 13的双精度矩阵,我需要遍历这个矩阵并将每一列保存到一个单独的一维数组中。

目前我有以下代码:

for i = 1:14
     for j = 1:13
     if i == 1
        A(1, j) = M(1, j)
     elseif i == 2
        B(1, j) = M(2, j) ...
     end
   end
 end

这仅适用于第一行,我不知道从概念上来说这是正确的。我不认为你需要手动创建一个单独的数组......

最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

我会使用num2cell对其进行转换,以便每列都是cell array中的单独元素。然后,如有必要,您可以使用deal将它们分配给不同的变量。

data = rand(14,13);
cellArray = num2cell(data, 1);

% And if you must assign them to variables.
[A,B,C,D,E,F,G,H,I,J,K,L,M] = deal(cellArray{:});

或者,您可以简单地访问cellArray的元素,而不是将它们分配给变量。

value = cellArray{1};
size(value)

    14   1

如果你不能使用内置函数,最好的办法是使用冒号运算符来获取给定列的所有行。

A = data(:,1);
B = data(:,2);

肯定不想使用for循环,如果你可以帮助它,因为它们在MATLAB中非常慢。

话虽这么说,将数据保存为矩阵然后对列执行操作可能更容易。矩阵是一种比工作区中有一百万个不同变量更清晰的数据结构。这实际上取决于你接下来要做什么。