Question

Je suis incapable de trouver une fonction dans matlab ou octave pour faire ce que je veux. J'ai une matrice m de deux colonnes (valeurs x et y). Je sais que je peux extraire la colonne en faisant m (:, 1) ou m (:, 2). Je veux le scinder en matrices plus petites de taille [potentiellement] égale et tracer la moyenne de ces matrices. En d'autres termes, je veux mettre les valeurs dans des bacs basés sur les valeurs x, puis trouver la moyenne des bacs. Je pense que la fonction hist devrait m'aider, mais cela ne semble pas.

Est-ce que quelqu'un connaît une fonction intégrée pour faire quelque chose comme ça?

modifier

J'avais l’intention de mentionner que j’avais jeté un œil à hist et ne pouvais pas le faire faire ce que je voulais, mais j’ai perdu la tête.

Exemple: Disons que j'ai les éléments suivants (j'essaie ceci en octave, mais autant que cela fonctionne avec matlab):

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

Si je veux 10 bacs, je souhaite que m soit scindé en:

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

puis obtenez la moyenne de chaque bac.

Mise à jour: j'ai posté une question de suivi ici . J'apprécierais beaucoup les réponses.

Était-ce utile?

La solution

J'ai répondu à cette question sous forme de vidéo sur mon blog:

http://blogs.mathworks.com / videos / 2009/01/07 / binning-data-in-matlab /

Voici le code:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top