如何在Matlab中迭代一列向量?

57

我还要告诉你的是,谷歌搜索“在Matlab中迭代矩阵”这些术语会返回Stackoverflow作为第二个结果。 - James
4个回答

101
在Matlab中,您可以直接迭代列表中的元素。如果您不需要知道当前正在处理哪个元素,则这可能很有用。
因此,您可以编写以下内容:
for elm = list
%# do something with the element
end

请注意Matlab遍历list的列,因此如果list是一个nx1的向量,您可能需要对其进行转置。


如果您想更改包含元素的值,此方法也不适用。 - greg121
5
如果您不确定list是一个列向量还是行向量,可以使用相当丑陋的组合(:)'for elm = list(:)'; %... ;end。组合(:)'也会从矩阵中创建行向量,因此需要小心处理。 - JaBe
1
你是指 (:).' 吗?否则你使用的是复共轭算子而不是转置算子。 - user2261062
如果您知道您的数据不包含复数,则“(:)”将完美地工作 - 虽然使用“(:)。’”可能是一个好习惯。 - Jonas

31
for i=1:length(list)
  elm = list(i);
  //do something with elm.

6

在MATLAB中有许多功能,您根本不需要迭代。

例如,要按其在列表中的位置进行乘法:

m = [1:numel(list)]';
elm = list.*m;

Matlab中的向量化算法通常更快。


2
如果您只是想将函数应用于每个元素并将结果放入输出数组中,可以使用 arrayfun
正如其他人指出的那样,对于大多数操作,在MATLAB中避免使用循环,而是矢量化您的代码最好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接