2

Does PDL already have a way to "clamp" vector elements to min/max values given in another vector? I've looked through the PDL::Math documentation but didn't see a good candidate option.

I could unpdl/re-pdl but that seems like too much overhead.

Is there already a vectorized way to do this?

I tried something like this:

$pdl = pdl [4.45, 5.55, 45];
$max = pdl [2   , 3,    50];
print ( (($max <=> $pdl) > 0)*$pdl + (($max <=> $pdl) < 0)*$max ) 
[2 3 45]

which seems to work, but what a crazy expression. Is there a built-in for this?

KJ7LNW
  • 1,437
  • 5
  • 11

1 Answers1

3

PDL::Primitive::hclip is for this:

pdl> $pdl = pdl [4.45, 5.55, 45];
pdl> $max = pdl [2   , 3,    50];
pdl> p $pdl->hclip($max)
[2 3 45]
Ed.
  • 1,992
  • 1
  • 13
  • 30