Matlab - Sustituir bucles for para más eficiencia

   
Vista:

Sustituir bucles for para más eficiencia

Publicado por García (40 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

Sustituir bucles for para más eficiencia

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3440 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

Sustituir bucles for para más eficiencia

Publicado por García (40 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