Domanda

Non sono stato in grado di trovare una funzione in matlab o ottava per fare ciò che voglio. Ho una matrice m di due colonne (valori xey). So che posso estrarre la colonna facendo m (:, 1) o m (:, 2). Voglio dividerlo in matrici più piccole di dimensioni [potenzialmente] uguali e tracciare la media di queste matrici. In altre parole, voglio mettere i valori nei bin in base ai valori x, quindi trovare i mezzi dei bin. Sento che la funzione hist dovrebbe aiutarmi, ma non sembra.

Qualcuno sa di una funzione integrata per fare qualcosa del genere?

modifica

Avevo intenzione di menzionare che ho guardato il suo istinto e non sono riuscito a farlo fare quello che volevo, ma deve essermi sfuggito di mente.

Esempio: supponiamo che io abbia il seguente (lo sto provando in ottava, ma dopo funziona in matlab):

x=1:20;
y=[1:10,10:1];
m=[x, y];

Se voglio 10 bin, vorrei che m si divida in:

m1=[1:2, 1:2]
...
m5=[9:10, 9:10]
m6=[10:11, 10:-1:9]
...
m10=[19:20, 2:-1:1]

e quindi ottieni la media di ogni cestino.

Aggiornamento: ho pubblicato una domanda di follow-up qui . Gradirei molto le risposte.

È stato utile?

Soluzione

Ho risposto in forma video sul mio blog:

http://blogs.mathworks.com / video / 2009/01/07 / binning-data-in-mATLAB /

Ecco il codice:

m = rand(10,2); %Generate data

x = m(:,1); %split into x and y
y = m(:,2);

topEdge = 1; % define limits
botEdge = 0; % define limits
numBins = 2; % define number of bins

binEdges = linspace(botEdge, topEdge, numBins+1);

[h,whichBin] = histc(x, binEdges);

for i = 1:numBins
    flagBinMembers = (whichBin == i);
    binMembers     = y(flagBinMembers);
    binMean(i)     = mean(binMembers);
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top