Mihai Sprinceana
Un forum de programare cu de toate. Va astept sa va inscrieti si sa deveniti moderatori. Oricine este binevenit aici sa se inscrie si sa aiba acces la informatie free! Fiecare este liber sa adauge proiecte programe free etc. Ajutati acest forum sa devina o comunitate puternica unde fiecare invata de la fiecare! Tot ce trebuie sa faceti este sa va inregistrati si fiecare contributie se poate dovedi utila in timp! Forumul este free informatia free dk aveti timp liber ajutati si pe ceilalti si invatati si voi in acelasi timp! Haideti sa facem ceva pt.a ne ajuta intre noi! Cititi regulament postare forum inainte de a posta!
Lista Forumurilor Pe Tematici
Mihai Sprinceana | Inregistrare | Login

POZE MIHAI SPRINCEANA

Nu sunteti logat.
Nou pe simpatie:
Iulia00 Profile
Femeie
24 ani
Bucuresti
cauta Barbat
27 - 57 ani
Mihai Sprinceana / Matlab / Functia accumarray -tutorial complet + exemple Moderat de andreeamp, fireratbat, profu.info, sade5000
Autor
Mesaj Pagini: 1
mihaispr
Administrator

Inregistrat: acum 17 ani
Postari: 2142
Input: 2 2 3 4 4 5 6 7 7 7 7 7 8 8 8 9 9 10 10 10 10

Output dorit:

[7 7 7]
[8 8 8]
[10 10 10]

  ix=[2 2 3 4 4 5 6 7 7 7 7 7 8 8 8 9 9 10 10 10 10];
     nx= (1:max(ix)).';
     ac=accumarray(ix.',1);
     r=repmat(nx(ac>=3),1,3)

Functia accumarray tutorial

Input: 2 2 3 4 4 5 6 7 7 7 7 7 8 8 8 9 9 10 10 10 10

Output dorit:

[7 7 7]
[8 8 8]
[10 10 10]

  ix=[2 2 3 4 4 5 6 7 7 7 7 7 8 8 8 9 9 10 10 10 10];
     nx= (1:max(ix)).';
     ac=accumarray(ix.',1);
     r=repmat(nx(ac>=3),1,3)

Functia accumarray tutorial:

Contruieste un array prin acumulare.

Sintaxa generala:

   A =accumarray(subs,val) - creeaza un array A acumuland elementele din vectorul val si utilizand ca subscript-uri in subs (unde subs este un vector initial dat).

Fiecare element din val are un rand corespunzator in subs. Practic subs defineste un tablou n-dimensional in iesirea lui A.

Practic accumarray colecteaza toate elementele lui val (care este la randul lui ca si subs un vector sau o constanta) care corespund identic subscript-urilor din subs, sumeaza aceste valori si stocheaza rezultatul in elementul lui A.

Elementele lui A nu sunt referite de nici un rand al lui subs care contine valoarea 0.

Deci vectorul subs trebuie neaparat sa contine doar numere intregi pozitive!!!!


Daca subs este o matrice cu nr. de coloane >1 atunci A este un tablou n- dimensional ce are marimea max(subs,[],1).


Daca subs este o matrice goala (fara elemente -contine NaN) cu nr. de coloane >1 atunci A este un tablou n dimensional gol cu marimea 0x0 0x0...0x0.

Variabila subs poate contine deasemenea un vector coloana, iar A este deasemenea un vector coloana.

In acest caz A are lungimea max(subs,[],1) cand subs nu este gol si lungimea =0 cand subs este gol.


subs - poate fi un vector de celule cu unul sau mai multe elemente, fiecare vector fiind format di numere pozitive intregi!!!!. Deasemenea toti vectorii trebuie sa aiba aceeasi lungime. In acest caz subs este tratat ca si cum vectorii formeaza coloane ale unui matrici subscript.

 
val- trebuie sa fie numeric, logical sau un vector de caractere cu aceeasi lungime ca si numarul de randuri din subs!!!

val - deasemenea poate fi si un scalar a carui valori sunt repetate pt. toate randurile lui subs

Pracitc accumarray sumeaza valorile din val folosind comportamentul functiei sum (care insuma toate elementele unui array).


Pt. accumarray exista 4 tipuri de sintaxe generale:


1)    A = ACCUMARRAY(SUBS,VAL,SZ) - creeaza un array A cu marimea SZ , unde SZ este un vector de numere intregi pozitive.

Daca SUBS nu este vid (are elemente) si nr.de coloane>1 atunci SZ trebuie sa aiba n elemente unde all(SZ>=max(SUBS,[],1). Specificam SZ ca [] pt. comportament default.

2)

    A = ACCUMARRAY(SUBS,VAL,SZ,FUN) - aplica functia FUN fiecarui subset al elementelor din VAL

FUN - este o functie care accepta un vector coloana si intorce numeric, logical sau scalar char, sau scalar cell. A are aceeasi clasa ca valorile intoarse de functia FUN. FUN este @SUM ca default. Specificam FUN ca []  pt. comportament default.

Obs. Daca subscript-urile din SUBS nu sunt sortate, FUN nu trebuie sa depinda de ordinea valorilor in datele de intrare.

3)

    A = ACCUMARRAY(SUBS,VAL,SZ,FUN,FILLVAL) - pune valoarea scalara FILLVAL in
    elementele lui A care nu sunt referit de nici un rand al lui SUBS.

De exemplu daca SUBS este gol atunci A este repmat(FILLVAL,SZ). FILLVALL si valorile intoarse de FUN trebuie sa fie din aceeasi clasa (Same Class!).

4)

    A = ACCUMARRAY(SUBS,VAL,SZ,FUN,FILLVAL,ISSPARSE) creeaza un array A care este sparse (deci contine si valori de 0 vectorul respectiv) daca scalarul logic ISSPARSE este true (adevarat) sau full daca scalarul logic ISSPARSE este false.

A este full default. FILLVAL trebuie sa fie 0 sau [] daca scalarul logic ISSPARSE este true.
VAL si iesirea functiei FUN trebuie sa fie double daca scalarul logic ISSPARSE este true.

EXEMPLE:


    Exemplul 1: Creeaza un vector 5x1 sumeaza valorile pt.subscripturi 1D

       subs = [1; 2; 4; 2; 4];
       A = accumarray(subs, 101:105)

Efect:

A =

   101
   206
     0
   208
   
    Exemplul 2: Creeaza un array 2x3x2 sumeaza valorile pt.subscripturi 3D repetate

   
       subs = [1 1 1; 2 1 2; 2 3 2; 2 1 2; 2 3 2];
       A = accumarray(subs, 101:105)

Efect:

A(:,:,1) =

   101     0     0
     0     0     0


A(:,:,2) =

     0     0     0
   206     0   208

    Exemplul 3: Creeaza un array 2x3x2 sumand valorile nativ

       subs = [1 1 1; 2 1 2; 2 3 2; 2 1 2; 2 3 2];
       A = accumarray(subs, int8(101:105), [], @(x) sum(x,'native'))
       class(A)

Efect:

A(:,:,1) =

  101    0    0
    0    0    0


A(:,:,2) =

    0    0    0
  127    0  127


ans =

int8
   
      Exemplul 4: Creeaza un array folosind max si completeaza elementele goale cu NaN
   
       subs = [1 1; 2 1; 2 3; 2 1; 2 3];
       A = accumarray(subs, 101:105, [2 4], @max, NaN)

Efect:

A =

   101   NaN   NaN   NaN
   104   NaN   105   NaN

    Exemplul 5: Creeaza o matrice sparse (ce contine si elem=0) folosind prod

       subs = [1 1; 2 1; 2 3; 2 1; 2 3];
       A = accumarray(subs, 101:105, [2 4], @prod, 0, true)

Efect:

A =

   (1,1)            101
   (2,1)          10608
   (2,3)          10815

    Exemplul 6: Numara cate subscript-uri pt.fiecare bin (number of subscript for each bin)
   
       subs = [1 1; 2 1; 2 3; 2 1; 2 3];
       A = accumarray(subs, 1, [2 4])

Efect:

A =

     1     0     0     0
     2     0     2     0

    Exemplul 7: Creeaza un logical array indicand bins-urile cu 2 sau mai multe valori
   
       subs = [1 1; 2 1; 2 3; 2 1; 2 3];
       A = accumarray(subs, 101:105, [2 4], @(x) length(x)>1)

Efect:

A =

     0     0     0     0
     1     0     1     0

    Exemplul 8: Grupeaza valorile intr-un cell-array

       subs = [1 1; 2 1; 2 3; 2 1; 2 3];
       A = accumarray(subs, 101:105, [2 4], @(x) {x})
       A{2}

Efect:

A =

    [       101]     []              []     []
    [2x1 double]     []    [2x1 double]     []


ans =

   104
   102


pus acum 15 ani
   
Pagini: 1  

Mergi la