Matlab - Sustituir bucles for para más eficiencia

 
Vista:
sin imagen de perfil

Sustituir bucles for para más eficiencia

Publicado por García (42 intervenciones) el 29/12/2014 07:17:49
Quiero guardar el número de ceros por columnas de R en un vector D. El siguiente código lo realiza con for y me gustaría hacerlo de la forma más eficiente con vectores:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
R=rand(3,7,2);
p=0.45;
R(R(:,:,:)<=p)=1,R(R(:,:,:)~=1)=0;
 
D=(1:size(R,2)); % Vector para guardar el número de ceros por columna
 
%Inicializamos variable.
contador_ceros=0;
for k=1:size(R,3)
    for j=1:size(R,2) %Vamos mirando todos los elementos
        for i=1:size(R,1)
            if R(i,j,k)==0 %1
                contador_ceros = contador_ceros + 1;
 
            end %1
        end % for j
            D(k,j)=contador_ceros;
            contador_ceros = 0; %reiniciamos el contador de ceros para contar en la siguiente fila
 
    end % for i
end %for k


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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Sustituir bucles for para más eficiencia

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 01/01/2015 22:14:45
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
>> Untitled
forma con bucles iterativos
 
R(:,:,1) =
 
    0.1080    0.5594    0.8487    0.5051    0.5078    0.0830    0.1710
    0.5170    0.0046    0.9168    0.2714    0.5856    0.6616    0.9386
    0.1432    0.7667    0.9870    0.1008    0.7629    0.5170    0.5905
 
 
R(:,:,2) =
 
    0.4406    0.4519    0.5539    0.2393    0.4068    0.3002    0.4036
    0.9419    0.8397    0.6801    0.5789    0.1126    0.4014    0.3902
    0.6559    0.5326    0.3672    0.8669    0.4438    0.8334    0.3604
 
 
R(:,:,1) =
 
     1     0     0     0     0     1     1
     0     1     0     1     0     0     0
     1     0     0     1     0     0     0
 
 
R(:,:,2) =
 
     1     0     0     1     1     1     1
     0     0     0     0     1     1     1
     0     0     1     0     1     0     1
 
 
D =
 
     1     2     3     1     3     2     2
     2     3     2     2     0     1     0
 
Elapsed time is 0.001341 seconds.
forma vectorizada
 
R(:,:,1) =
 
    0.1403    0.4294    0.4249    0.7064    0.0741    0.2207    0.1425
    0.2601    0.2573    0.1192    0.2436    0.3939    0.0013    0.2681
    0.0868    0.2976    0.4951    0.7851    0.0034    0.1892    0.1749
 
 
R(:,:,2) =
 
    0.1386    0.9394    0.3760    0.0684    0.0261    0.9616    0.6800
    0.5989    0.2212    0.5238    0.4363    0.9547    0.7624    0.7060
    0.9011    0.4827    0.2649    0.1739    0.4306    0.0073    0.6451
 
 
R(:,:,1) =
 
     1     1     1     0     1     1     1
     1     1     1     1     1     1     1
     1     1     0     0     1     1     1
 
 
R(:,:,2) =
 
     1     0     1     1     1     0     0
     0     1     0     1     0     0     0
     0     0     1     1     1     1     0
 
 
N =
 
     0     0     1     2     0     0     0
     2     2     1     0     1     2     3
 
Elapsed time is 0.000449 seconds.
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
sin imagen de perfil

Sustituir bucles for para más eficiencia

Publicado por García (42 intervenciones) el 02/01/2015 12:03:58
Muchísimas gracias!!!!
De todas formas ¿cómo se accede al código "Untitled" para ver la forma vectorizada?
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