【问题标题】:How to show something result for lots of time in two for loop?如何在两个 for 循环中显示很多时间的结果?
【发布时间】:2019-09-04 08:22:42
【问题描述】:

我用matlab写了一段代码,可以显示一些计算结果两次,我的意思是,如果A=[1 2 3]B=[1 2 3],我想计算A和@987654324中每个元素的加法@vector 两次

我是说

第一个结果应该是A(1)+B(1) A(1)+B(1) A(1)+B(1) = 2 2 2

第二个结果应该是A(1)+B(2) A(1)+B(2) A(1)+B(2) = 3 3 3

第三个结果应该是A(1)+B(3) A(1)+B(3) A(1)+B(3) = 4 4 4

第四个结果应该是A(2)+B(1) A(2)+B(1) A(2)+B(1) = 3 3 3等等

最终结果a应该是[2 2 2 3 3 3 4 4 4 3 3 3 4 4 4 5 5 5 4 4 4 5 5 5 6 6 6 ]或者

2 2 2 3 3 3 4 4 4

3 3 3 4 4 4 5 5 5

4 4 4 5 5 5 6 6 6

我在这里写了代码,但结果不是我想要的,窗口显示给我

A=[1 2 3]
B=[1 2 3]
for i=1:3
    for j=1:3
        for k=1:3
            a(i,j)=A(i)+B(j) 
        end
    end
end
a =

   2     3     4
   3     4     5
   4     5     6

【问题讨论】:

    标签: matlab


    【解决方案1】:

    我认为你可以用一个或零个循环更简单地编写整个事情:

    A = [10,20,30];
    B = [1,2,3];
    repetition_count = 3;
    
    
    disp('first option');
    C = A + B.';
    for x = C(:);
    	disp(repmat(x,[1,repetition_count]));
    end
    
    disp('second option');
    disp(C(:) * ones(1,repetition_count));
    

    Try it online!

    【讨论】:

      【解决方案2】:

      使用implicit expansion(r2016b 及更高版本)和kron,kronecker 产品:

      %Example 1D array
      A=[1 2 3];
      B=[1 2 3];
      
      %get the result
      res = kron(A+B.',ones(size(A)))
      

      哪个给:

      res =
      
         2   2   2   3   3   3   4   4   4
         3   3   3   4   4   4   5   5   5
         4   4   4   5   5   5   6   6   6
      

      【讨论】:

        【解决方案3】:

        当您为a 选择索引时,您必须考虑k,以便每行中的索引从 1 变为 9

        A=[1 2 3];
        B=[1 2 3];
        
        for i=1:3
            for j=1:3
                for k=1:3
                    a(i,(3*(j-1))+k)=A(i)+B(j) 
                end
            end
        end
        

        【讨论】:

          猜你喜欢
          • 2013-01-22
          • 2015-02-20
          • 1970-01-01
          • 2014-07-13
          • 2020-06-09
          • 2019-07-21
          • 2011-11-16
          • 2012-05-25
          • 1970-01-01
          相关资源
          最近更新 更多