Matlab - Inicializar matrices 3D de forma vectorizada a partir de los valores de otras matrices 3D

   
Vista:

Inicializar matrices 3D de forma vectorizada a partir de los valores de otras matrices 3D

Publicado por García (40 intervenciones) el 01/01/2015 20:30:25
Quiero inicializar matrices de forma vectorizada a partir de que los valores de una determinada matriz sean "0" o "1". Me gustaría la alternativa a los bucles for, para hacer, por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Em=rand(3,7,2);
u=rand(3,7,2);
R=rand(3,7,2);
Pg=zeros(3,7,2);
K=zeros(3,7,2);
p=0.45;
perc=0; % Podría tomar valores 0 o 1
 
R(R(:,:,:)<=p)=1,R(R(:,:,:)~=1)=0;
 
for k=1:size(R,3)
        for j=1:size(R,2)
            for i=1:size(R,1)
 
                %Si es igual a cero calculamos la nueva probabilidad de ser    
                %ocupado por un ión
                if R(i,j,k)==0 %1
 
                    %El campo eléctrico será el calculado anteriormente con
                    %la función campo eléctrico
                    F=Em(i,j,k);
 
 
                    %Temperatura calculada en el instante anterior con la
                    %función heat
                    T=u(i,j,k);
 
                    format long;
 
                    %Dependiendo de si percola o no utilizaremos diferente
                    %parametro de ajuste Go y G1.
                    if(perc==0)
 
                      Pg(i,j,k)=F/T;
 
                    else
 
                      Pg(i,j,k)=F*T;
 
                    end
 
                end
 
                %En el caso de que ya esté ocupado la probalidad es 1.
                if R(i,j,k)==1
                    Pg(i,j,k)=1;
                end
            end
        end
    end

Muchas gracias,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de Matlab
- Código fuente de Matlab
- Cursos de Matlab
- Temas de Matlab
- Chat de Matlab
información
Códigos de Matlab
- Elige una carta
- Fuerzas de Coulomb
- Fixed Pivot
Imágen de perfil de Daniel

Inicializar matrices 3D de forma vectorizada a partir de los valores de otras matrices 3D

Publicado por Daniel (212 intervenciones) el 21/01/2015 21:38:03
Veo que todo los for se puede escribir de manera mas compacta así


1
2
3
4
5
6
7
8
9
F=Em(R==0);
T=u(R==0);
if(perc==0)
    Pg(R==0)=F./T;
else
    Pg(R==0)=F.*T;
end
Pg(R==1)=1;
Pg=reshape(Pg,[3 7 2]);

Espero que sirva

Saludos

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Inicializar matrices 3D de forma vectorizada a partir de los valores de otras matrices 3D

Publicado por García (40 intervenciones) el 22/01/2015 12:24:01
Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar