【问题标题】:Iterating over the sum of values using a loop使用循环迭代值的总和
【发布时间】:2018-09-08 10:37:07
【问题描述】:

我有一个如下的行矩阵

a=[1 2 3];

for 循环实现如下

 for i=1:a(1,1:size(a,2))
    disp(i);
    disp("Hello");
end

根据行矩阵的值,Hello 必须打印 6 次(即 1+2+3),但它只打印一次。如何沿行矩阵迭代并打印 6 次 Hello

【问题讨论】:

    标签: arrays matlab for-loop matrix


    【解决方案1】:
    a=[1 2 3];
    for ii=1:sum(a)
        disp("Hello")
    end 
    

    1:a(1,1:size(a,2)) == 1:a(1,[1 2 3]) == 1:a(1,1) == 1:1 == 1 实际上创建了一个包含数字1 的数组(更具体地说:a(1),因为1:[1 2 3] 将评估为1:1,丢弃向量中进一步的所有元素)。鉴于你提到的数字 6,我认为你想要 a 中所有元素的 sum,它由 sum 给出。

    最后的警告:请不要使用ij 作为变量名,as they also denote the imaginary unit


    阅读您的评论,您可能需要一个嵌套循环,因为 a 的条目可能不会单调增加:

    k = 1; % counter to show which iteration you're in
    for ii = 1:numel(a) % for all elements of a do
        for jj = 1:a(ii) % do the following a(ii) times
            disp('Iteration %d', k)
            disp('Hello')
            k = k+1; % increase iteration count
        end
    end
    

    请注意,当a 不包含严格的非负整数值时,这两种方法都会失败(显然)。

    【讨论】:

    • 不是我想要迭代一次,然后两次,然后三次的总和,因为我将来可能需要实现这样的 for 循环。那么我该如何以这种方式进行迭代呢?
    • 迭代一次,然后是两次,然后是三次意味着您要在 sum(a) 上进行迭代。我看不出这种情况有什么问题?
    • @KushanPeiris 我想我解决了你的问题,请参阅编辑,但这闻起来像XY problem,所以我认为你最好用实际代码提出一个新问题,而不是一个过于简单的例子,因此我们可以看看您当前使用的方法是否好(我怀疑不是,因为这是一种非常人为的循环用法)。
    猜你喜欢
    • 1970-01-01
    • 2022-07-11
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多