0

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

这是我要应用该过程的数组,长度为 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=总和(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 

我写这最后一部分好吗?

4

2 回答 2

1

以下是在 MATLAB 中进行编码的一些提示:

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

话虽如此,你可以试试这个:

% # 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

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

于 2012-11-08T12:47:39.577 回答
1

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

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

等等

于 2012-11-08T12:44:19.563 回答