p-norms, Vector
Isiah Meadows
isiahmeadows at gmail.com
Thu Jun 8 06:18:32 UTC 2017
This *really* seems like a good use case for WASM + SIMD (and a small
static heap), given the number-heavy nature of it.
On Mon, Jun 5, 2017, 10:47 kdex <kdex at kdex.de> wrote:
> Thanks for the pointers!
>
> > `array.reduce( (a,b)=>a+b )` (Although I wouldn't object to `Math.sum()`)
> Yes; no objections here.
>
> > `Math.hypot(...array)`
> I'm aware of `Math.hypot`, but it only covers `p = 2`. The important thing
> about `Math.hypot` is that it doesn't demolish numbers with high
> magnitudes in
> the process of raising them to the power of two.
>
> It would be great to have the same safety for other cases (i.e. `p = 3`) as
> well. The idea was to generalize the concept for every `p`.
>
> > Will DOMPoint solve your use cases? (Personal annoyance: you can't index
> > DOMPoint numerically.)
>
> Unfortunately, `DOMPoint` would be a Web API, which might (and probably
> will)
> not be available in other environments.
>
> Essentially, what I'm suggesting is an environment-indepdendent `Vector`
> class, though I'm reluctant to go into more detail, as I feel that hardly
> anyone would want a `Vector` without proper operator overloading.
>
> On Monday, June 5, 2017 1:09:21 PM CEST peter miller wrote:
> > Hi,
> >
> > > In mathematics, the p-norm of a vector is defined as in [1].
> > >
> > > For p = 1, we get the taxicab norm,
> >
> > `array.reduce( (a,b)=>a+b )` (Although I wouldn't object to `Math.sum()`)
> >
> > > for p = 2 we get the Euclidean norm,
> >
> > `Math.hypot(...array)`
> >
> > > and
> > > for the limit as p → ±∞ we get the maximum/minimum norm.
> >
> > `Math.max(...array)`
> >
> > > Particularly the Euclidean norm is pretty common in graphics-related
> > > code.
> > >
> > > This could be implemented as an addition to`TypedArray.prototype`.
> > >
> > > A rough sketch might look like so:
> > >
> > > ```js
> > > TypedArray.prototype.norm = function(p) {
> > >
> > > if (Number.isNaN(p)) {
> > >
> > > return p;
> > >
> > > }
> > > const { abs, min, max, sign } = Math;
> > > if (Number.isFinite(p)) {
> > >
> > > return this.map(x => abs(x) ** p).reduce((a, b) => a + b,
> 0) ** (1 /
> > >
> > > p);
> > >
> > > }
> > > return abs((sign(p) === 1 ? max : min)(...this));
> > >
> > > };
> > > ```
> > >
> > > Since norms are a little too specific for `Array` (as they don't
> > > necessarily
> > > contain numerical values), it might be worth pondering about a
> > > native`Vector`
> > > implementation.
> >
> > Will DOMPoint solve your use cases? (Personal annoyance: you can't index
> > DOMPoint numerically.)
> >
> >
> > Peter_______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20170608/8a9cc930/attachment.html>
More information about the es-discuss
mailing list