Aggregate(/"vertical") stats?

Are there any plans to expand the fluid.bufstats~ paradigm to work with stats of stats?

As in, for the database/querying thing I’m building I have computed a whole load of stats for each sample, and then have them all jammed together in a single coll/text/json file.

I would like to then have some statistics on all of the loudness-es across the corpus (min/mean/max for normalization for example), and same goes for most other statistics.

For now this is mainly for input->corpus normalization, but I could see this being useful in general to know what’s “in there”.

At the moment I can uzi through all of the entries and fluid.bufcompose~ them into a single buffer, then run some stats on that, but that can start to get real fiddly if I have to do this with loads of different statistics (my current corpus has 22 data points per sample).

I don’t know how this would work in the current fluid.bufstats~ paradigm as it takes a single buffer as input. I guess being able to refer it to a named polybuffer~ would be good, but that brings complications that have been mentioned elsewhere.

At the moment I’m using @a.harker’s alpha/beta entrymatcher~ update which computes statistics for columns of data. This works well but doesn’t cover all the desired stats. Plus it means moving from buffer->list->buffer to get back to the fluid.-verse.

Is there an approach on the roadmap for something like this?
Or better ideas on how to go about it?

i’m sure @weefuzzy will have some wisdom here, and there are definitely (for toolbox2) ways of dealing with this. It is actually the raison d’être of the whole project :wink:

1 Like

It will be slightly fiddly at the moment, yes.

If you have N entries in your corpus, each of which has 22 data points that you wish to summarise, then you’ll need to compose a buffer N frames long, with 22 channels. I think what adds to the fiddleyness is that, if you’re starting from outside buffer~ land, getting data in channel-wise rather than time-wise is harder (or at least feels harder). We can’t use jitter tricks so easily, because jit.buffer~ uses planes for channels, rather than an extra dimension.
Fundamentally: patcher languages make iteration a bit of a drag, and buffer~ isn’t really a 2D data structure as far as Max is concerned.

So, in this case I’d jump into js. The attached marshalls some data out of a coll and into a buffer~ for further stats-y goodness.

collbufcorral.zip (161.1 KB)

1 Like

Cool, I’ll have a play with this and see if I can generalize it a bit more. (I don’t think I need all 22 stats-of-stats (nor am I sure which stats-of-stats I want (is there a name for stats of stats? (are they derivatives? (can you have a derivative of a derivative (without it being a 2nd order derivative?)))))).

Hope it’s useful. I think there’s a mistake, in that it runs bufstats~ too many times (once per
coll entry ), but that’s simple enough to fix.


----------begin_max5_patcher----------
1782.3ocyZszaiaCD9ryuBBidnEHMUjh5g6o1a8RQOziaWXPIQ6vrRjBRTYy
tK182d4CIEIGKGZY4ra.hEzPRwY9lgyLbH+xMqVmHdhVuF76f2AVs5K2rZkg
jlvp12Wstf7TZNo1zs0Ez5Zxd55assIoOIMzSyojpNp7lBFOmJMCA0RrV9ob
pouccikYdUj7vuFNXnhFY2XgsTKIxz6Y78aqnoRK6BiP24cKHNP+qej9WjhB
38sCw9UjepjZ6+50f2qa4q2bi9macTd4zOp3uWHtBNMgv2OeAFdbAFMs.irx
H1HvvvfWWhsbX6yYI8ohhBJW9BwuVRj0+yt+U+.TeunIOCjPUrCH8dBmSyqA
hcfHvtJhxfoa34LNMUzvkCkzQPGzEnKZywwNuowt.C14i1XwtPya9ZraFfRR
iTJ3qmO+Ge1F6VcuO12ZBz86qn5WRC9c4Mrr6RZ1YT8eC7G0hlpTJntonfT8
I06VagAFFGUs6OeXyatKYhL5aHxrjAuwkkLKJ1oPsczpucTv47wgvMy.GLF9
Heq8OzAuk6xED4k47XBzHUjmCxRt..XhfE3oA.eDzH4XijG3cWvqFs31A+22
sZxizrsJlP8k2RjxJlxYfM.5pdTX0ZZQB0vudFBFbagPOIHqonDjS46k2eAX
Xv4aDAMqehL+F6+5lPZFUCes75hF.5unUY.FWJ5c.YWj8e7e9ffPPODtMNzu
rvAhBwmcfHDN13IO7Gg.QgnyOPj0Hvx+W2.QSo5+axGTgcDETPFQRTJbiFVw
hohpLiJWYA7HIuYJE97CAE5M6LOL5aOixW6DZVHxT4dWSJJqA+DTI3yOgzf4
jUhMdRjQrZiw71kC99JRB.Oey+fIL+CdcI1pHCgNHw29hXIKGBTBp+DWdOsl
8Y6pgK.LfyLozMsl1Xmz9C+ZzpCiatikSejVUyTd0ddtWslTVNf7pACQiSOH
Lenna6Iw3VR98jpnOx5FOtmJoRISRk.0TYAlm5coq+LhLZEugYXEKQkF6ltO
X+FQ8w1UAV6+.yCbr2yHgR6tOWj9g1bB5HJJobFurhVqbyQjsbWeyYzcjlb4
1cBtTqfMrgFrOR66HozIGLWE6yHc+YEij2IepkOrLAWyDivZM4toSIb1caFL
TXL8fSJOxfsYFMQi5zeapSHUZUQh0TD00nTHxG2T+3xo6jsMWxTw0GihRQ4z
MVw1e+IFahP0Xwo91lVp21vsstUshTtUmE339QxyaWhN9y+DgyJHRpjYUAHu
9FobhRPuuNsRkO7H401xiGokLkUbJ8irLc5TpIZnwfp6rxNin08Z4L1dZsbL
MIYe8XJuv0fhTSR6pzsRZQYtRJF2gQkNZ3RxgNyFQ+TN0NLK2DvvJJMoSsI3
9Cbt0GWb5LdmL9sm08l8QP7gd4N81Hsxf0k+y6DXUmq+EF0dPv3.zjPF5bfL
X7zPF7zPVbaJOlsH3uwMD6MCjj.FHYYLqfQy1rxhQv.SnCeO2vHF+vcje8gq
OmC1WIZJAnExvZ9XFzyV2hXSZWQNBZCR555iV+FHFpRHZYPpvYuBrCork6.G
4FRYK4yaETUQ3YhBCdsLvUvECW15hECce03aEX07Y1hs.DOMN46DNAsm4B1+
7hE187sF2zkGXYPN+YibsYQX2wTP3OH.mAFlDZ7NKipMyd0mEavdOGIz2yIn
YTW5pVzK3QdF8oA6faQ.NK+rLIQD3MMx44ThV1CBcBnaV3xy60SW3rIRx2vP
51ONfYOenV8UW1RfwLmZWKRFuequu64TOAdNZoOKt.5.WfulLQriPg133pwE
5.JNwE9Wal.dFPwfNVvxJUa4Q1ZfB2DqOWG+.j9wlv9WtRrtFVPtXOGcEwOr
qVRWSdXiiLQmE2UgKBbjIBuh7Pni7v0zh3rbyBOJSzRrqZmtdrmmUQn1mKRH
4skXpuDkmphTOW1pE+TUGU4jYb3IX7LqdNLBaKW7c95+PuoGfR+8RvdDpy+v
C7m+URncKEdvumWIgGpA5akfBOREUUj76TDtXPAMWahNLI.cNGohiqQ0GwR+
psCE59kZkD8AlKoUasEi9BuKCW5AUuYtWXJuua2WpK9VtfN6K4RqGEbaEqCu
ai9Oz2sa5h4aMdGDV.8vHZsv5oilNUJEi5ygYDFC0IABaKEcX+KSnockwvXW
3rA6fX1yT.xgYJH9Tf.J1jVLDac3N3skf2vuBuEFtDnPrCnf+lEXlBcAuCCV
hYJX3FelRyhVfYJxyAYJJdAloMtXrBWfIB4xBvkXhft.cdKgDo9F9NHPvI80
oBvg6b364aKTqYmvl2VBq0KxWLRweWCewAP24rKVC8ZyCFuPSDzkIBNZhrga
O3pxnmiCthLGb8Xd4UiY5qEygWIF0L+0a9evLpydH
-----------end_max5_patcher-----------

is there a name for stats of stats?

maybe pooled statistics, not sure, for my stats know-how is pretty bad

are they derivatives?

Not in the usual mathematical sense. A derivative is an expression of how one thing changes with respect to another

can you have a derivative of a derivative (without it being a 2nd order derivative?)

That’s what a higher order derivative is (glossing over the whole messy business of derivatives in multiple dimensions)

1 Like