【问题标题】:How to iterate over a column vector in Matlab? [duplicate]如何在 Matlab 中迭代列向量? [复制]
【发布时间】:2011-03-28 13:15:04
【问题描述】:

可能重复:
How do I iterate through each element in an n-dimensional matrix in MATLAB?

我有一个列向量list,我想像这样迭代它:

for elm in list
   //do something with elm

怎么做?

【问题讨论】:

  • 我也会让你知道,谷歌搜索术语“迭代矩阵 matlab”会返回 stackoverflow 作为第 2 个结果。

标签: matlab iteration


【解决方案1】:
for i=1:length(list)
  elm = list(i);
  //do something with elm.

【讨论】:

    【解决方案2】:

    在 Matlab 中,您可以直接迭代列表中的元素。如果您不需要知道当前正在处理哪个元素,这会很有用。

    这样你就可以写

    for elm = list
    %# do something with the element
    end
    

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

    【讨论】:

    • 如果你想改变包含元素的值也不好
    • 如果不知道list是列向量还是行向量,可以使用比较丑的组合(:)':for elm = list(:)'; %... ;end(:)' 的组合也会从矩阵中创建行向量,所以要小心处理。
    • 你的意思是(:).' 对吗?否则,您将使用复共轭运算符而不是转置运算符。
    • @SembeiNorimaki:如果您知道您的数据不包含复数,(:)' 就可以正常工作 - 尽管无论如何使用 (:).' 可能是个好习惯。
    【解决方案3】:

    matlab 中有很多函数,你根本不需要迭代。

    例如,乘以它在列表中的位置:

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

    matlab 中的矢量化算法通常要快得多。

    【讨论】:

      【解决方案4】:

      如果你只想对每个元素应用一个函数并将结果放入一个输出数组中,你可以使用arrayfun

      正如其他人所指出的,对于大多数操作,最好避免在 MATLAB 和 vectorise your code instead 中出现循环。

      【讨论】:

        猜你喜欢
        • 2011-08-05
        • 1970-01-01
        • 2021-09-03
        • 1970-01-01
        • 2016-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多