Pregunta

No he podido encontrar una función en matlab u octava para hacer lo que quiero. Tengo una matriz m de dos columnas (valores x e y). Sé que puedo extraer la columna haciendo m (:, 1) o m (:, 2). Quiero dividirlo en matrices más pequeñas de [potencialmente] igual tamaño y trazar la media de estas matrices. En otras palabras, quiero poner los valores en bandejas en función de los valores de x, luego encontrar las medias de las bandejas. Siento que la función hist debería ayudarme, pero no parece.

¿Alguien sabe de una función incorporada para hacer algo como esto?

edit

Tenía la intención de mencionar que miré hist y no pude hacer lo que quería, pero debe haber pasado por alto mi mente.

Ejemplo: Digamos que tengo lo siguiente (estoy intentando esto en una octava, pero afaik funciona en matlab):

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

Si quiero 10 bandejas, me gustaría que m se dividiera en:

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

y luego obtén la media de cada bin.

Actualización: he publicado una pregunta de seguimiento aquí . Apreciaría mucho las respuestas.

¿Fue útil?

Solución

He respondido esto en forma de video en mi blog:

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

Aquí está el código:

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top