Matlab中双数组的循环构造

时间:2012-11-08 12:37:25

标签: matlab loops

我有一个关于如何构建循环的问题。我有一个双数组,我想编写该进程。

这是我想要应用这个过程的数组,长度是4x4(我只做第一个,但原来是4x4x3)。

b1= (:,:,1);

我想申请这个过程的每一个价值:

1.-每次创建一个向量,包含数组中每个值的信息。

ma= 0;
 for p=(136:136)
 ma(p)=b1(1,1,1);
 end
 for p=(312:2151)
     ma(p)=0
 end
 ma= ma';

然后,我必须处理以下过程的最后一个结果(我之前定义了变量)。     spout1_a = spb1y.ma;     spout1_b = spout1_a./spsum_pesos1;     spout1_c = sum(spout1_b);

问题是我知道怎样才能为一个值(第一个)做到这一点,而不是对所有值都这样做。我该怎么做?

问候并非常感谢你,

艾玛

修改

b1= Refl(:,:,1);

load sp1.txt;

spb1y= sp1(:,1);
spsum_pesos1= sum(spb1y);
output = cell(length(banda1), 5); % this works well

 for i = 1:numel(b1)
    ma = zeros(2151,1);
    ma(136) = output(i);
    spout1_a= spb1y.*ma;
    spout1_b= spout1_a./spsum_pesos1;
    spout1_c= sum(spout1_b); % I want to save that result on every value of the matrix
end 

我最后写这篇文章了吗?

2 个答案:

答案 0 :(得分:1)

简单的解决方案是为每个变量添加索引q,然后从q = 1:3

循环
b(q)= Matrix(:,:,q)
ma(p,q)

诸如此类

答案 1 :(得分:1)

以下是在MATLAB中编写代码的几点:

  1. Preallocate :在循环之前分配内存,以便变量不会在循环内的维度上增长。这导致MATLAB在每次迭代中动态分配内存,这通常会显着减慢执行时间。
  2. Vecotrize :尝试仅在必要时使用循环。在许多情况下,您可以使用矢量化操作,而且速度要快得多。
  3. 话虽如此,你可以试试这个:

    % # Iterate over each value in 'b1'
    for i = 1:numel(b1)
    
        % # Create a vector 'ma'
        ma = zeros(2151, 1);
        ma(136) = b1(i);
    
        % # Do some more calculations with 'ma' ...
        spout1_a = ma;
        spout1_b= spout1_a ./ spsum_pesos1;
        spout1_c= sum(spout1_b);
    end
    

    我不确定你想要达到什么目标,但这段代码完全符合问题的描述。