我有一个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
这仅适用于第一行,我不知道从概念上来说这是正确的。我不认为你需要手动创建一个单独的数组......
最好的方法是什么?
答案 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中非常慢。
话虽这么说,将数据保存为矩阵然后对列执行操作可能更容易。矩阵是一种比工作区中有一百万个不同变量更清晰的数据结构。这实际上取决于你接下来要做什么。