Weighing descriptors in a query

if you read my 4 point example carefully, until the maths make sense to you, then you’ll see that smaller scale make smaller distance for that dimension and therefore will narrow its range and therefore will make it ‘more important’

but

indeed when you have many dimensions with real, noisy signal, that dimension will always seem very near so if you have huge variations on other dimensions they will seem to have more impact on the change…

I recommend you try real data that you can understand in 2d. pitch and loudness for instance, and try to control the matching. You’ll find out that it works. with more dims, all of different scales to start with, where 1 doesn’t equal 1, you are getting so many problems.

I also recommend trying catart with that ‘feature’ to see how it works ‘as well’ - it is now in the package manager. just to test and see if you get the feel you expect, that is.

I’ve read it and understood it (as far as I can tell).

This toy example is to verify what I’m experiencing with real analysis data. When I make the dimensions big, it matches that descriptor more closely (perceptually). In my realworld example I am replacing the pitch column from incoming drum analysis with a sequence of notes and then matching in a (pitchy) corpus with that. If I increase the dimension size, I start hearing the correlation as I would think I would.

The fake example (in the video above) confirms this.

Here’s the realworld comparison:

In both real and isolated/fake tests, having larger values makes differences in the corresponding columns matter more in the distance matching. Perhaps we are not using “more important” in the same way.

The way that I’m wanting to do it is this realworld example where I want to make it so a certain column (or columns) matter more in the distance matching. In this example making it so the most important feature being matched is the pitch one.

Until you have a 2d real-world behaviour that works, where 1=1, I will wait. There is too much noise in HD - as you know for the many times we discussed the ‘curse of dimensionality’ for instance.

Same toy example but in 2d:

I’m keeping a value constant as it makes it easier to test/compare, but the idea still holds up.


----------begin_max5_patcher----------
2759.3oc6bk0jaZrE94Y9UvUUxK2ZhRu.cCya2eGtRMERfzfMBnfViG6TN+1
u8BqRrzRpYPwkicIESCb5y947wA82O9vpMouGVrx5YqOY8vC+8iO7f7PhC7P
4+9gUG7eeareg7zVkD90zMed0SpkXguyjGNyJ2OIH8va9wEDupky7YaeMJY+
K4gaYJp.QTu0fmrvtNhu7rEehPqAV+U4EkdjEGxXeKKTcEqVUuTTfjX7Mve.
wzJpjb7PTB+RjaPTyAU2H4Qgs2Pg4k7WIC9vpcQwguElWDklz5reXkeVVqC+
PqKQHU9bp7F49T8ghRTGhTen7v2hptdP8Q8y4hEFWlbLWxjqdmXup41jFDlm
bLRtUTG7GOVskjZhD+CgEY9aUWrPgUsbif1QJlg.h3KWrq7Kabiflqo2Gmt8
KgAs2bqRyBShRxxCKBSX9rS16qBB24eLl8xtzDVQz2k6.HW80256J2g8tnfG
ja++WdjebMCrOOJHMQrI5nIDGthbbiHosi3yFlQdFI9Y8bwb6EtXYfEK3L4w
hM94BE0l3vVFQb66zz3tKUecwg6XkKmEkjbhTjklM7h4Q6ecjqcSJewCicuk
qT7xwD0puvsIXuT3+VWoMyONtzcs6s+c+jnC9rPVjREf.0KFl3yYzWK1lmFG
2geUq7VOqDvsw2F90n.1qRB01Xfe5QYUFQqp0xAQ6CKXcOFyeeQ2iTv9lRn2
5PG2T5C+BK7PVLmK5dBbuinBVwqoesn7DqLzZK.Zh401mtcruNGerXfciC9m
bON9+st8h8DEzAIC6o7QK+GshA1ebvcwo9rUcNm1ADaSx9BI1WXwpE9wiOV8
+7j4EJ+WqIEHX.THDr8.RYg2ZGCHQP12uxjOmFkXglPpPkYGcnTYFSpdlICK
OftKr7XyQdjsjIXZBRk3RYIXW843L8F+j8iv3ztzLmGRfwCgnho0I27oBF3R
anv3NO0UTMn6CVJzrwRwE1yHAT.dqtakJppMUAamJVqzPB5op.hbyNQNKrSj
jdZ4CYK4bb8m2hKDd3XofgY6VqrM8vAdEkcxVKIRRP36KgLBCgWtPZBWFryb
KkPFTJo1CZkChnJUY.wTGQ.4JhZ.tUCkl9.hiRFp5NI2IVueYSQ5w7sUJ5xR
pr5xn7BZYQI0cE8oVIVEmoV5lKdWHh3n29XV2ETskFmueSyCTccCmmMmHUkd
aNQMg2CBod1w0BIv7r4pXcMsmgylPxU28gHVx7orvNWjQyrIOv5qWnCJOJOX
EPQqDnAD7hB4iW7Yr7Hdw2p.isQ95h5Peeb5F+3SZqtuF3erYyI+TIlLD7hi
.tnp6QnpgZW3UCsHtWnEg+BZwdfVzyQ1Wpqq2ufV7WPK9KnEWZnEgks3BwlC
aQz8KNZZJU7PFWnbGC35EfNRo4BzwwHvifH+THUTlKlRn3c+JSXVQValBnD2
V.xRw5ILh3cv+zTfJAvWAVAnOFISQVNmG1YwKUI+a+wuG8r0uui+WsjUHhDz
DH5lgrGLbnW7cCZiJl1lbI.oIrOFFCIv+l.aTKXzTxHLPaXzf+7.ilvMWz97
jM3hHezfhzCEGXqMiHQfzFzHwYhlKbHtncwbgFh28.VmZav58gizoHznlpI7
rKhz2bY91GZ67fg+rCdFueEd9fwvGCJKHgRjPiAsomNlE8TZxoEw0cBKZMpe
C9P06GEsco4G7Ysfzpux7tPAvgvhB+8gmAe3ugzPnnRMe9nmnKpgnKZfDMH2
4rlZ6BpKXPl5da5QUtezHihIV0eCxS0UrpnDmqfywyLmO.pvh4JB.WMJGple
DrSyi5cbca2d96xlvERACViHXGK7ZOBAZizX5ZsUyCBDStVLvQfEhY+RRneN
O5YYiWDJ8RsqIJlm.nJ7ouVyZ.YlEAcFGpd4DphS7FXVnlXHN5xMfqNT8r4.
uK9XTv5MG2ghiJXiHHnJGXhsrKJJZZqZ4MrOAgGZYBVUbbCurDFuNBq8grrT
dCvVbNeGuZwo4akoLTm.XhD18y3WR3KjYCeAvDwXr45fGiYgJDlpdDLzqL1k
q2xngUVyA9L+hP1+XEDsUTYnOOH1tiISqjcHJkrC4FTxtNWvitDMKV20AvqL
y0f0QzV3sdsrNZgruUdwVGwDJ.BA1t8lvBORXdUUJkuRLp5vr8tX6dJcIs6E
AbQbQwzZarBoPchhWFfrWt8hdH8yhkdohuxfWCNWogg13avNmN214Sy3rb+j
BQCbV6hFiscIJjgKcuQzafsItKCaqrt+R.KOL7elVEy6DSZbaeKr5bGDe3L0
PJ1qwyR6NIqhbq.19p6jrdTUlqHXwQuEtNnYnPV8leCVL0K9IxeMVOVPP4C4
QpuUCQr6TJ5g6qzgNVg4vKvRnC5U0vVMB.Vu4GeLLc24SfTyNIJIhIjWJVGz
BosyOoy21cNq3zj8iIr6bxG35M4MB.Zl5i1mPwqo4MS5SVDWO028oRMz2s3H
eaWOHHNO1FUPSN7ZLqNMe0iAEQ8L3csq7alJzQ6mdV2t7fKTVwr3HwapBT9b
h0v6ApdIUnTcgjYTeH69iXhm6jC+m+TW9UgwlM5VPfxlrLE3wrBNdHyZrIuj
KET.OQTuRiZXCKtmClBDRl4TfhtyV+VT3WG2wDoxmgTuVUJsmXvR6aOO.jY8
umAlS8jmJpISINmjWrI2d8IH3RVJVUC1ZXM5.USB7s.aBBuLcTm4+EK3Z9e0
fOqp6x4ZQ60dYBrjkGlElDXwi3EngsaUiidWIa5rL4FYVa3+QmnmX.tolxI5
LV.z6SMe2eqhW.Cim4NEyCGGpy5LHkMKpSpxgwBZgfBpgc0F8uZcux3FhuZm
Xvx3DKyjl4u8KVErfmsND5m7LvBXsMMt3YjNQuTHAAIZTKXiXseYP+Ylr+Xf
.qf4mD3mGD88PcxNUgFD3VPCBhuCJTBAJ6EVEl1U0er.H69MTcuiKTpjWJe1
32TcRPf8xTnzwuGIabdD1T09ETM6CN1WdBmgZAkdI7LdNBCIJP74oC+T97kv
kXSBu4fOT3EzDpoC.umabmMI2B8jeQH2NyBl4hol7gii8Z0Q8s7nwcH2qOY7
K+YIB63WCU3uekgubrWlNeD0KuMNzOeRkuqpvAn6zyrUUXK0MtW1EsPntK59
okF152POMURpxXWzxGaJ3JKYzF+uqmTthswHzsabCuRks7d0c53UBhSmb0Rw
w4SrZm216AeSualU0yD45RIaGcnjc6Qc9jwW9pIsDG5kh15PZpAjuTfNDxDZ
RpNrjM1.TxCoAkDCXi40aZQZ4T115r595gLyzF.5m1nai15nb8PFP45pS.AO
SXv5pkYjiInjNJNhI7A6FrZ.ucfonDZJdBaB2cJVmPXz4vcWORilCucpNVmD
SXcR0PSZJ5LoW.lZHJAmLPoAHDw8iRIQzIrn6rXIpEokCht4c.czwnwlzOa+
APZ46ag4E4NDMnsiIR25nSXFpsonzTdkNFgRZEnwDMuniZx14ipMIx.sp.tc
ROczTizLnNoaMAgPXM3IjQnjNENiLQtHnNFiHronD7CgRXcBBeRUZlpEcrdI
..ygSWckyyek7Pcnj6bjkSKJSbmEkKROkqmIDvZECPYtYdflzi3mDPzTJXfV
3HBbMgTVKz7lmTjPvGUEGPsxEedQTJDgO42yQAQN42wwS9Mb77e+FG92twS+
caT9CUvP+dM93Od7+C3eTeyN
-----------end_max5_patcher-----------

there is a bug in your sexy patch, my dear… do you want me to tell, or just tease?

actually, I will spell it out now as you will chase ghosts. you are forgetting to scale the query too, via transformpoint. This explains the strange behaviour you get.

so if you scale up by 10x the 2nd dim as you do (div by 10 under the hood), doing the same to your query point is needed. you can either do it via transformpoint which handles the maths to match the kdtree’d scaled DS, or do it at the query (but divid by 10 there)

I hope this helps

I am scaling it:

What I’m not doing is scaling the original dataset as I fit a scaled one for the comparison but then getpoint the original dataset for comparison.

So I’m scaling both the queried dataset and the buffer going into it.

edit:
I’m doing it manually (with multiply) since it’s just a single point (and not a dataset). In both cases the values being compared are 10x, for the dataset being done with transform since it’s a ton of values, but for the input just being done numerically.

i can see that, but it doesn’t behave like my sc code, so there is a problem in your thinking. if you make 4 points, do you get what you want like I do? doing 100 random points is just confusing.

do 4 points, midicents and db. like 60 -60 / 72 -60 / 60 -48 / 72 -48

query the mid point, ish (like a Eb (63) at -57dB)

mess with the pitch weight. see if you get the behaviour you expect. now this assumes 1dB = 1semitone but that is less bad than mfccs in 13d anyway.

also, spying knearestdist at the output of your kdtree is useful to see if it behaves the way you think it should.

ok I have a toy for you. ask for 2NN and see the behaviour.


----------begin_max5_patcher----------
2390.3ocybk0aaiqE9YmeE5Jb6aod3h1bd696nXPfrEsCajoDjnRSmAS+se4
hVcjroTn7TzfXDRIxy2Y+bHq+6G13tO6cRoqySNeyYyl+9gMaTCIGXS8euw8
b76GRiKUOl6YRYY7Ih6i543j24pwAa8b.aA.PT.pYxTJibHqhodBb8frpyTV
JgqVNT8f4w7CuPYmdtfbfqImPn+VviNA6.xO7U+1a2Vfye1sPYU7lUBVOpdH
9OyI5kw0s8EnIJJMa+2+JF5JG6ed3A4udzPryH+P7xe.5GSqnIa2WcDkRK4t
yEm.jBmdgxOBU+ABMebp16wvJZmEwZY09RNkWwIN7hXV4wrhy4YTF2Qf+ijh
4h9.sfM.fke.C8tA7QSJlebBQMJ5t.+WYj3BxBD+XEC.Go9.Fsy9L.eqqqWx
iYIwEIz+h7KmxCwoSH3gWC2JyaLFpvMNx931aI3dJ+aBo8IhyWAagNvsv4Jk
Q65IjivK0FebbhVBN+dYEsAEGooDV7YROIbdZFmOeyYMNChBTBU+tOtgTceV
QhX2Di.lsbFF41RPEBTHH6mEvYep5MA1S2uHSZ22Xnmr.e8QQ0AyzF6.66sC
hroRuNntmHpNX1p7QgJ0b+PkA9Neqpyu6t5SeIh5.s+MOj1XGXe+aAVjGj6b
pPrzyzGtN0LnuJmE7NqJggXra+cV6cXSKrzdsdiTTRyX8V9Mtw448FdSuWQx
K9dlZghdrcHJSOje6PEj2nMue2nwEB7yEfupP6o78.O2tkIS3.iI7oJIE8fB
oRMIo3+ROrk4wGzurTL0LcGG0em1wPf1lQkRXTTurdEx2SoYGdkjzyYofmlS
XTVtPYkv3w7ZZuc5Dxw3pT9yGyX7RQPaEQJkZiL+wZJbzIaiR7+Jnwos.Pp7
jwjDw.Igb3ls6aN574k+tCLpmfEmOxKKTBDrkIlTj.BupbebgTPU6oG0LIOK
Kc3TsuWJ4Hud5bJicAWjmkO8jEzSubk2cuHdY14qs1pYJethom8YgNA+4x32
Fxs4woo0FoCW92iYzywbBmpEAHP6j5ncuTdnHKMc.d0y71HyjHzwOP9AMg+h
Zi5qLHdbZdiRjaqTNgdRlf6fw3wmJGNRI+mZldugp1WaC+LmbNOUfhgOfv5P
3hs7kreTV+fMJZ8Y.cEp12ltuGuAieMOeC898EGT+wGyE+Tt.04sB80t22s0
enKvocCNtqPJqqFtOjmmayvJe90dXrO23OVN2HPyMzYAttbC3chavcnNzI4G
PizNzo6YD+.cK9wi2fs.v2IFSYdgfPN5HB3T7yu9E5WnO47kiheljY4YByBE
nRJF5AtLch4p8bEdjUMkT.bRPCLAzdp380cB.rRFLXPeh7P14yD1Pu4p2fkP
duWRLVgEoIzOmUDFryXlDXJV.7SyB5xcQ1cyIhHo.gb9w4MkYUEGZjYMVsBc
9AHRDFlSYs4x07jhmSfbijMylJzq8soAg8ykTaa86veCHM73jFXcHMkryDhC
shxNzrXPn6ICZdjF3tpVI8IZHwgWSKOfwLI7zd.pGrorSWYsEIOqqi54XNuf
tuhqcY0uN5Ykuun3y8woWjj9XkC7PGwY81zzzWFmWD0jkJqKa9ccWULpOJTm
9dn06NSDx5ccWdBOn8UGmaaZ7CUQNiB.etSXp9DdFCsg30ogb5s7h9xsPgcS
lkqvYLEhV49Q5bjN+lMqqFyqVGGYec7fHqqi+ZBufP90BOMIOc+0WAIbfuM6
qtnhPvbEmPnuVMF26.wsV6VCVzgkkReirMoqSftuE2ETncxuE7myUdBg0MLW
UXjGTKbWl77XZV73mLte30N4H3fvnswOuRjz2hSqHYG+Xam6VdJixk7KMJA8
B4+wG5izxfmJMic5ZL6AO7YgbSsPxyxoqYe8ejxWxJ5ZvaNUHTFakZ3tisDU
BBus+e9OzOAEalJ.2YRCnqpSEnOOxHOsewkZ.0uJ6g8Uvl2pjx7TJWckZfJ3
tcT7husMDTexL6Vr+esAzUsj7r4cL3+7GpVlMeGjZ7tC+4DuWAk17H23NIUm
ycJmsZLP2HDu.0G99KUrJ29oOG4EA0D5A912njer.aSjNpV8YIpkdQvIgEXj
KBAv01G1ulGMW8PMV7BVqjQP1+1qkDyiKI7esTsQe0wI5DArOXsYoE4wu5.2
J9Y1B0Zb1j8kcuNCPOahwBRNgk3HbikrT6Prtizg18L88sp6y8h+sXumX8EN
TmY4U.HdxhgiYmj5rMeNdcgqcYgEjEbmKaifTWY3MCUtfteXypk5fqL9BMiE
W7yudrhsTbWqbCwV1H1lgeTQRyiO7pSIO4ImyjX1S.GfygrzxmPyNUvFuW5l
+.CBWJx6j.iyCf+NdWSaE7Q9q0kMEhuq4Kg.0EFq8VGoAzUtnkfwzWi9sHeo
Zrf0wTWgzkf.aFds5unNdNyt8M5hvfPkkmmmsB6LUsngdqhyHYZhOcMmPnq0
FZcBT0siDtRtfBg1F4mD514yuo6JXpq5V23g0.rKJly9JNOiMWDg20qtZule
O6CQPp3NZxgA2oqw8vBdLImhqEZYfcMLv9QV78rbVyGRIwEKS3GoSe.Fc4MY
xTT131RSCiBWqdA1k0.0SB67eQOtnXT09tBqOtP616cOr6uoZ2ZXiQn0R4dQ
9pkMfu6+7JFiE8YIzbJfVVFhaCGJoNs.p5LiPO8x9rphRS8soV6gWsHMK4xq
TPMi4CWk.7faRvD2hf.+tKQvGX9ltSx1ce6sB50+tBcwE5Xk26fI1avmZu87
GrpSceQfVfE64+uFG1Kvfs1y+dAx0QTh7LXqQQCdHKweQ6LXqUW1G3mj+dA8
OAH2YAIYv8x0iQxsfwEan6fFi+3a8mTY0+dwdCwFrSgHarSlDspgm+o1Ii7j
hsQXQSXdQqgBhQ6bvp3MCBtWr2HSzXfQ1valIpLWPN1hcZhK6P78BjPzpntZ
hjbmMB.d2TYjcZz7sxt5LgdFjVZHvFtRMgeFZCm1pEAcS2J1wssQA8rB+yj7
j7Q1RRcKcBeqHoLI.PnMpIBZT0Wd2OqYv5DLOv.bhrhluIpiVYmPlTzNxFlX
HrIbOqThtItMrwFIurp2tf7.ajSPzcqPCirkszFcq3H1.Plv4f1PFEZhojmU
bOXxNEZiMxHusezTR2xzK9V+PtIW7s8wEeSe7wukOl9a3iK+18P8ewpo9V83
g+4g+O7dwtKG
-----------end_max5_patcher-----------

you can flip the dial for a more intuitive pitch weight.

let me know if you need a more verbose explanation. nn=2 is enlightening as you start to see your browsing being messed up biased.

p

It’s kind of hard to reconcile with this example, particularly since there are no unique values to compare against (since it’s just 0011 everywhere).

Actually playing with your example, if I seed [1, 1] in the plotter (top right), the nearest matches I get are [1, 1] and [1, 0]:

If I make the values teeny tiny I still get the same results for 2NN (entry-11, entry-10):

The nearest match in the second column is still 0, and the first column still matches as a 1 as that is closest in both.

However, if I scale the values up to make them large, I now get the nearest matches of [1, 10] and [0, 10] (entry-11, entry-01), meaning that the large 2nd dimension overpowers the distance in the first column:

This fits with my expectations (and synthetic/realworld examples above) where even though the distance in the first column is larger, the distance matching cares less and overrides the identical match in that column opting for the 0 match there.

It’s worth mentioning that it gets confusing with the 0011 approach since the closest match never changes.

I think I was wrong then right then wrong again.

The best way to get it is to look at the plotter of the scaled. it is clearer:

if I put a large number in the hack, it divides (collapses) that dimension, so it is less important in the scaled distance measure.

if I put a small number in the hack it multiplied (expands) that dimension, it becomes more important once the query is scaled.

(sigh)

that is why I want 2d examples. so much easier to visualise.

we can see that most of the space between the 4 dots will be separated on the X axis, so it means the Y (pitch) is less important, with a large number at the top (and smaller distances on that axis)

(sigh again)

I’m making a Fiebrink-style visualiser now to visualise it all. watch this space

1 Like

arghhhhhh I’m so confused now. Why isn’t the first NN the right one post-scaling is where it is wrong. but I don’t know why yet. there is something fishy.

let me sleep on this.

1 Like

Hehe, welcome to my world for the last couple weeks!

(hence me defaulting to the audio/realworld comparison where it’s clearer the directionality/relationship)

for me, if I cannot make sense of 4 points in 2d, I keep on trucking on the maths. There is something wrong in my reasoning here… but I’ll get to the bottom of it.

1 Like

ok i remembered a similar issue when we thought there was a bug in KNNRegressor, years ago. And also discussions about distances when we taught them.

  1. Obviously, large scales are more important than short scales.
  2. equidistant toy examples are dangerous without real-world reasoning.

#1 is clear when we spoke about the problem of MFCCs normalising. Not normalising means lower, wider range have more weight then they should, but normalising gives details too much importance. Even more when using derivatives.

#2 is even simpler - I just had to find in my old brain an example when I used weighing in Sandbox#3 loooooong ago. So here goes, from scratch, to see if the explanation is good and clear.


We need to scale distances both in the target and the query. amplifying distance makes them more significant. for instance, a piano sampling with 2 shots:
shot1: C4 @ 60dB
shot2: C#4 @ 61dB

What would be the best answer if I query a C#4 at 60dB?

If I care more about pitch, it would be shot2.
If I care more about loudness, it would be shot 1.

To achieve that, here is a little patch to visualise the zone, the hommage to Fiebrink. @rodrigo.constanzo please make it beautiful.

Screenshot 2024-01-06 at 09.16.05
Screenshot 2024-01-06 at 09.16.15
Screenshot 2024-01-06 at 09.16.24

the patch:


----------begin_max5_patcher----------
2862.3oc4bstaaiiE92IOEDFo.6LHICuoaAKVr6yQmh.YKZG0JKIHQmlNCl4
YeoHorkisjXhORMKVjT6TRYc32gmKej7H+mWe0hkEuHpWfd.8YzUW8mWe0U5
lZZ3J6++pEaieYUVbs9xVrpX6VQtbwsl9jhWj51yJ1kjKTWjsirzbwphc45d
CrMVFKW8TZ9lGqDqjFoFcO9VTfGu4MRn9UL9dL5K1OR9tso4YBoV5jCMVrS1
1J11ZZhdjTr7q2EvZGGqKxkqiWIzWXSS+00W27xsWHd+m2gJSUnAc2+ZQ+ny
2+9.uaQggrFj4qekB.7nKdGPIW7c0G9DjHQKQKG.CLe8rhm9MFUCA5aCBzSg
fOoUjlqS9iRgQdKVFmuYws12Qe4cfzrzmE2mjFm0Jimiqxi2JNtyOS+x.vlx
ocLM4D8qgWLtYgGjYkZHIEUOJxiWlI5daNQmznOVmUDqFbsxuN9YQxiwRYU5
xcRwg+p1pYrplFzmsSTrts4116NDRySkM5Ksz1iwycImNZO5pxJx2Ljp9nKd
qZVSeiTtDms6z7ltuqm9qepnRdPXpHPmSHsZwycG1ovTs7GV3X5Waq09FLtX
OKdorBUV78+A82+8auYMA8qJP8KCY8g0tagLSfwlXFuc2NxYL+X851MotZju
LNXg1Ui9+kdZjo2SSm36msq1VEYi3MhS70HHBBOfwVHVak4EnMyXdC6XQc0w
xOBXGq9vGVYzPF.eApD0dS.9BlM7M77W.lLI3yelvmBcChOee7jXexmI7UVj
lKWUjUTgtgitgftghtgMnIqEx9bCSSV.TXlBLl6I8dY7pugRM+3.LoZhkdgC
iRtqnzKZdPYsHCoVIT0OtCia+Ch8OHssPFbd1rFBOlYcPjQVKg2Y0.dmQCD5
1ZINy6fpgpThWf9VtHtRTKGTQXX5DYH48t7wOCgGu9WSE3XsrRTJxSP0Bo1i
e.zxIF.ZvYTHPTY4yjcubD2ZOLwD1ROYRiZxNAvBj43dgmVcadaBBisFs1gI
SehwUd3ISlySlj4Yx7WQ36GJDkGmcOsYBjn2XJFCnTQ79SE0tXi4Cj7nnoAj
7YDjeBQbYhjDxAkGE2aP2RHQ3uMLBamEsHbr.OtiPe3QnZwxxh7g.ieTmcHk
295klhHXns..OHoAHmI28GoHBc300v8s69sgiz6hCL6Lp.24FAs86XINCL6v
JIjBZhSFYtSbVuaYsLU1P9a4t0qEUHYUbd85hpsiwMx2CaBOoiOQB3.QEjFM
eTAWmsKM49rzZIUAeG.qYAPATfHBR6eqILSGvyRZXNR104XI7xgZ4rT+OFbj
Bv5X0TOJnrGndefnH466MEXjD8wggT6zHI.TBRjfOJDjZmCM.DL9QDueB7iB
zaLuhcPDnDjHz+2gfj0dkXbIAifj+OM9QcnMbLeA21BIsAAmZ17gvHnHNDN2
DGpkw4IwUIo+g3uQ0qhyTIrGmCQjg6HKDn5Qfxm.b22djqls2HP2oRAgH2St
E8T5lmxT+Sd59pNzwlZV8dn8rgifJOLz6Z9Wq2kNJLBLjBskYh9sgww5zLw9
SjzXIUlUHkGrdFcNmD9th9YsGrcurnJogh46q7h5ijIZSUZx.JsHbmXgrHfX
RSFt7.5NbLPt6Ye2Lg7rnpNsHu6QVuHtrrSyGer3ai+Zg9FEt+DiUiaSSd6a
pR7bZ6m+PqwUJkhToQ1UYLBdY+Yb0baJTyJ4JCutm1b6PRq+aLdpKskFldZp
s6N6hTTm0jGYx4D1Dqc+41uX4lrhUeSjz8buWTTJxSyKUwvU9wwR6Xee2Ih0
w6xjO1TbZ0p3d5AI89y1+9hW6bct2A3+TcnDLtZQiwSQdyf3nYhllaE2mQlM
xs40CfQeE4wkm4CqrOTpkd5TECWtqdYbUyDk0+g11ornH63t1+4xDqk1tKSy
yekVTVT1emUMwK6u6kpPAEaG5dq6o9wc4ldeTYSHeroTON95hyxrNoGe6eIN
OcarTHSMSAT79NMwPdpdUUQV1Q30zyymomDkM9Jw2SSjOoETWiA0kmV1ZDsX
+rbR5lFNBG0lLdS8wsrulK5zztkVe3GkhskYJTb7En7NTqlu9ohuWauvVCst
JfCENZWe5tQ7Np8gh785EtP6194pIQydkYOC0SX12aVi9CC1WwCMFQ+NkwRa
bef0F+1nZC6NGZY.LEZCxGFsQ2MUbDqCL1U8AoW8AsG8AlMpF414UwTWVoD2
ZKwwOk9ozGPeZs5WmTVTeSgFxOoPC6sxDdCVO3g8lfUGoGnNAZS8lvvsu1Oj
wuYHyvN3xz4JZqy7twg02y7DwKcHw.hJxLbbRGwLq51EkT+dQ39TRGEW4coB
Nvco4INnmLRZz0z+40M0E6pV0NyXC9iNFnpjvxz78L49bGC6Wck6WNfaSXS6
Pid9gFdRFZZadGGbLyUNMii169niC5jOJHtnMlzQgyFLrIcb7lLaIyoG0aan
wb2ixpJaW1osLxMqiZfZH+Mw2Ws3ykwYuhj94VN.3OSCma2KQqSGZOKCMDU4
z.Ce0.f1yR+YeOK+VhrRH9az+VM1xEpUhtTYUUObQtZq4ufiNza.dPp7lOvK
QI61VhpG.lJV2QFtU5277.Blj92m9lwz6GpIoqj2+bp36CAJhu4PGvzNa9LM
jbwOIeT7Bnq+Ti5XTrvMUiLbUb.YtcBShkw0B4e6f0nmoViCwPcZArYrRai+
FBeu5WGdbwvgt3z49QcxmoBn2VLwYEwINX5xLKbK.ps81atJj3kpebI3ICyN
7jv8VA3YNiy.mOiyI+.NQUh0Cd.e6SfXYIvo.EfJbFOfuCvsI8hhIWb0Ota8
tbWl6aeJX.yIFOOl25Do5pipVl7.ZqHN+glGVsUEY0OPc.4TK0H+.fJpbR+o
jNLs7S+Ds2OwaJWL3NRaxTjjxE5R1rQbSRWVnAP8ejtNyVhfCma5RVrXKPSv
XKQv74iAQS00PGbwIlSPlXpTJNGnRqIf+Sq1ZNDLpgk3CiGDxVOQL6RSI.E7
MX1CAoQ9Fksc4nnkDoey2GHdTA3ICriVfbLKoAPKONO+OFkG2wq24Mvo3H+Z
hOTYV73y4dNrDsJSDWM5juYKUHjPfdPB7niF9xLv.k5XyZf5LCitgd6X4nrw
tBLyxdXndTmXyCww2q0sA11ml.3LteK6igVTGexSFEwq2DZq53jMe1+ncetm
cdt4wXpyEMRAmApnozyKZxkKZxHhN.e37Hd2RpgBxnRxm.fjZdHzGUc1TgZW
rjZuICJoluU.tbsmCBhPAPPLWTdD6b4kIIlKRBBCBhKSSLF.Rh5px6hswcQR
Abn7aoigIPzdNY54CAlbJVODPJ.6x7DAnHDiMM4AjbFKLNAhDF9QyUvUemRX
.gxyOX1vj+rIIOWjDDl39NEdMDBI4fyDCDtJtXj6SghUDaLIEAkjFS605Ib4
RZTNkPjwvyI2IJTY1GCSdfvgvkrfdP3N4RDBBDoa4QyUDBtKF4bHxCxcImAG
DL4hQNGBSOtKVDbHbm3tv8mS.X8LbmVOCDPh5JjnWpjbhmLD4LzdJiE06U1m
.sEHtIZuoXie3XWmIu3k06x97nIivfPRi5FLI6ilah1aJLhntj3gBQnS5rsX
EpKIdnP38ScIwCEBFiTWR7nGNWZ5.pKIdnPj1lxbv2lBQTD5rs.LpSaINDzq
HQtZQbwRxI+IH7bIN4OwfRRjYQRNsHBHhFQbZmoA4PQHtHovoHWoSR1ObJxU
RbIJBHNbtDDAhrJ5ZHx4.i.qMcS13owJBOWqrm3z1NeJAKy4B+pu4KZDxq9F
u3UeaWb52zE8+sbwq+FtP+XF022rEW+WW+eAYfkeg
-----------end_max5_patcher-----------
1 Like

That’s a good example to illustrate!

And to solidify my understanding, having the larger values (as in how my synthetic/real examples above do it) is, in fact, making those columns weigh more?

Or more clearly, bigger numbers mean more weight?

yes, the larger the range of a dimensio, the more significant it will be.

1 Like

you will notice I used an exponential scale to change the weight. I find it more efficient but your mileage will vary, depending on range and stuff

1 Like