逐个地解决每个Matlab数组元素,与维度无关(行与列)

时间:2016-01-25 18:13:52

标签: arrays matlab

我想对数组中的每个元素做一些事情。对于行数组,我可以这样做:

array = [1 2 3];
i = 0;
for a = array
    i = i + 1;
end
fprintf('Number of iterations: %g\n', i)

Number of iterations: 3

它将输出3,因此它实际上一个接一个地访问每个数组元素。

但是如果数组是一列,则相同的代码只输出1:

array = [1; 2; 3];
...

Number of iterations: 1

我想知道为什么会发生这种情况,如果有办法迭代一个数组,独立于它的“方向维度”而不使用for i = 1:numel(array), a = array(i)

1 个答案:

答案 0 :(得分:1)

当使用数组初始化for循环时,它会逐列迭代。这可能不是您想要的,而是内置行为(请参阅http://www.mathworks.com/help/matlab/ref/for.html)。

您可以将矩阵强制为线性行向量,因此MATLAB将使用以下内容逐个迭代元素:

for i = A(:)'
    i % use each value of A
end

通常,向量运算的组合将比for循环更快,因此当您无法想到相应的向量运算时,只使用for循环。