in reply to Re^12: PDL and srand puzzle
in thread PDL and srand puzzle

To get a single SV out of an ndarray, use $pdl->at($offset1, ...). That SV will have the appropriate numerical info available, be it NV, IV or UV.

By the way, this is as you have marioroy has been doing with some of your test scripts, including looping over large ndarrays one element at a time. That made those scripts go impressively slower with PDL than the other versions. PDL has a function to output ndarrays in text column format: https://metacpan.org/pod/PDL::IO::Misc#wcols.

Replies are listed 'Best First'.
Re^14: PDL and srand puzzle
by syphilis (Archbishop) on Jun 10, 2024 at 13:35 UTC
    To get a single SV out of an ndarray, use $pdl->at($offset1, ...)

    Thanks - that's what I was looking for.

    By the way, this is as marioroy has been doing with some of your test scripts


    The only thing I noticed was marioroy's use of $pdl->at.(0) which returned a 15-significant-decimal-digit representation of the value - not what I was looking for:
    C:\>perl -MPDL -MDevel::Peek -le "$pdl = random(); Dump $pdl->at.(0);" SV = PV(0x1c544eeb140) at 0x1c544eeaa10 REFCNT = 1 FLAGS = (PADTMP,POK,pPOK) PV = 0x1c5474d1ca0 "0.2684813620074430"\0 CUR = 18 LEN = 20
    That construct threw me a bit, and I'm way too dense to realize that all I needed to do was to remove the ".":
    C:\>perl -MPDL -MDevel::Peek -le "$pdl = random(); Dump $pdl->at(0);" SV = NV(0x1426b33a8f0) at 0x1426b33a908 REFCNT = 1 FLAGS = (TEMP,NOK,pNOK) NV = 0.32972986684150651
    Cheers,
    Rob
      Recent PDLs, given too few offsets to at (whether because of a syntax mistake or otherwise), throws an error. It allows "too many" offsets, so long as they're all 0, in line with the PDL convention of being able to pretend an ndarray has infinite higher dims all length 1. Your snippet here creates a zero-dim scalar, which then can be either correctly offsetted with no offsets, or over-offsetted with 1 offset.