1Core(3) User Contributed Perl Documentation Core(3)
2
3
4
6 PDL::Core - fundamental PDL functionality and vectorization/threading
7
9 Methods and functions for type conversions, PDL creation, type
10 conversion, threading etc.
11
13 use PDL::Core; # Normal routines
14 use PDL::Core ':Internal'; # Hairy routines
15
17 PDL provides vectorized operations via a built-in engine.
18 Vectorization is called "threading" for historical reasons. The
19 threading engine implements simple rules for each operation.
20
21 Each PDL object has a "shape" that is a generalized N-dimensional
22 rectangle defined by a "dim list" of sizes in an arbitrary set of
23 dimensions. A PDL with shape 2x3 has 6 elements and is said to be two-
24 dimensional, or may be referred to as a 2x3-PDL. The dimensions are
25 indexed numerically starting at 0, so a 2x3-PDL has a dimension 0 (or
26 "dim 0") with size 2 and a 1 dimension (or "dim 1") with size 3.
27
28 PDL generalizes *all* mathematical operations with the notion of
29 "active dims": each operator has zero or more active dims that are used
30 in carrying out the operation. Simple scalar operations like scalar
31 multiplication ('*') have 0 active dims. More complicated operators
32 can have more active dims. For example, matrix multiplication ('x')
33 has 2 active dims. Additional dims are automatically vectorized across
34 -- e.g. multiplying a 2x5-PDL with a 2x5-PDL requires 10 simple
35 multiplication operations, and yields a 2x5-PDL result.
36
37 Threading rules
38 In any PDL expression, the active dims appropriate for each operator
39 are used starting at the 0 dim and working forward through the dim list
40 of each object. All additional dims after the active dims are "thread
41 dims". The thread dims do not have to agree exactly: they are coerced
42 to agree according to simple rules:
43
44 · Null PDLs match any dim list (see below).
45
46 · Dims with sizes other than 1 must all agree in size.
47
48 · Dims of size 1 are expanded as necessary.
49
50 · Missing dims are expanded appropriately.
51
52 The "size 1" rule implements "generalized scalar" operation, by analogy
53 to scalar multiplication. The "missing dims" rule acknowledges the
54 ambiguity between a missing dim and a dim of size 1.
55
56 Null PDLs
57 PDLs on the left-hand side of assignment can have the special value
58 "Null". A null PDL has no dim list and no set size; its shape is
59 determined by the computed shape of the expression being assigned to
60 it. Null PDLs contain no values and can only be assigned to. When
61 assigned to (e.g. via the ".=" operator), they cease to be null PDLs.
62
63 To create a null PDL, use "PDL->null()".
64
65 Empty PDLs
66 PDLs can represent the empty set using "structured Empty" variables.
67 An empty PDL is not a null PDL.
68
69 Any dim of a PDL can be set explicitly to size 0. If so, the PDL
70 contains zero values (because the total number of values is the product
71 of all the sizes in the PDL's shape or dimlist).
72
73 Scalar PDLs are zero-dimensional and have no entries in the dim list,
74 so they cannot be empty. 1-D and higher PDLs can be empty. Empty PDLs
75 are useful for set operations, and are most commonly encountered in the
76 output from selection operators such as which and whichND. Not all
77 empty PDLs have the same threading properties -- e.g. a 2x0-PDL
78 represents a collection of 2-vectors that happens to contain no
79 elements, while a simple 0-PDL represents a collection of scalar values
80 (that also happens to contain no elements).
81
82 Note that 0 dims are not adjustable via the threading rules -- a dim
83 with size 0 can only match a corresponding dim of size 0 or 1.
84
85 Thread rules and assignments
86 Versions of PDL through 2.4.10 have some irregularity with threading
87 and assignments. Currently the threading engine performs a full
88 expansion of both sides of the computed assignment operator ".=" (which
89 assigns values to a pre-existing PDL). This leads to counter-intuitive
90 behavior in some cases:
91
92 · Generalized scalars and computed assignment
93
94 If the PDL on the left-hand side of ".=" has a dim of size 1, it can
95 be treated as a generalized scalar, as in:
96
97 $a = sequence(2,3);
98 $b = zeroes(1,3);
99 $b .= $a;
100
101 In this case, $b is automatically treated as a 2x3-PDL during the
102 threading operation, but half of the values from $a silently
103 disappear. The output is, as Kernighan and Ritchie would say,
104 "undefined".
105
106 Further, if the value on the right of ".=" is empty, then ".="
107 becomes a silent no-op:
108
109 $a = zeroes(0);
110 $b = zeroes(1);
111 $b .= $a+1;
112 print $b;
113
114 will print "[0]". In this case, "$a+1" is empty, and "$b" is a
115 generalized scalar that is adjusted to be empty, so the assignment
116 is carried out for zero elements (a no-op).
117
118 Both of these behaviors are considered harmful and should not be
119 relied upon: they may be patched away in a future version of PDL.
120
121 · Empty PDLs and generalized scalars
122
123 Generalized scalars (PDLs with a dim of size 1) can match any size
124 in the corresponding dim, including 0. Thus,
125
126 $a = ones(2,0);
127 $b = sequence(2,1);
128 $c = $a * $b;
129 print $c;
130
131 prints "Empty[2,0]".
132
133 This behavior is counterintuitive but desirable, and will be
134 preserved in future versions of PDL.
135
137 These are important variables of global scope and are placed in the PDL
138 namespace.
139
140 $PDL::debug
141
142 When true, PDL debugging information is printed.
143
144 $PDL::verbose
145
146 When true, PDL functions provide chatty information.
147
148 $PDL::use_commas
149
150 Whether to insert commas when printing pdls
151
152 $PDL::floatformat, $PDL::doubleformat, $PDL::indxformat
153
154 The default print format for floats, doubles, and indx values,
155 respectively. The default default values are:
156
157 $PDL::floatformat = "%7g";
158 $PDL::doubleformat = "%10.8g";
159 $PDL::indxformat = "%12d";
160
161 $PDL::undefval
162
163 The value to use instead of "undef" when creating pdls.
164
165 $PDL::toolongtoprint
166
167 The maximal size pdls to print (defaults to 10000 elements)
168
170 barf
171 Standard error reporting routine for PDL.
172
173 "barf()" is the routine PDL modules should call to report errors. This
174 is because "barf()" will report the error as coming from the correct
175 line in the module user's script rather than in the PDL module.
176
177 For now, barf just calls Carp::confess()
178
179 Remember "barf()" is your friend. *Use* it!
180
181 At the perl level:
182
183 barf("User has too low an IQ!");
184
185 In C or XS code:
186
187 barf("You have made %d errors", count);
188
189 Note: this is one of the few functions ALWAYS exported by PDL::Core
190
191 pdl
192 PDL constructor - creates new piddle from perl scalars/arrays, piddles,
193 and strings
194
195 $double_pdl = pdl(SCALAR|ARRAY REFERENCE|ARRAY|STRING); # default type
196 $type_pdl = pdl(PDL::Type,SCALAR|ARRAY REFERENCE|ARRAY|STRING);
197
198 $a = pdl [1..10]; # 1D array
199 $a = pdl ([1..10]); # 1D array
200 $a = pdl (1,2,3,4); # Ditto
201 $b = pdl [[1,2,3],[4,5,6]]; # 2D 3x2 array
202 $b = pdl "[[1,2,3],[4,5,6]]"; # Ditto (slower)
203 $b = pdl "[1 2 3; 4 5 6]"; # Ditto
204 $b = pdl q[1 2 3; 4 5 6]; # Ditto, using the q quote operator
205 $b = pdl "1 2 3; 4 5 6"; # Ditto, less obvious, but still works
206 $b = pdl 42 # 0-dimensional scalar
207 $c = pdl $a; # Make a new copy
208
209 $u = pdl ushort(), 42 # 0-dimensional ushort scalar
210 $b = pdl(byte(),[[1,2,3],[4,5,6]]); # 2D byte piddle
211
212 $n = pdl indx(), [1..5]; # 1D array of indx values
213 $n = pdl indx, [1..5]; # ... can leave off parens
214 $n = indx( [1..5] ); # ... still the same!
215
216 $a = pdl([1,2,3],[4,5,6]); # 2D
217 $a = pdl([1,2,3],[4,5,6]); # 2D
218
219 Note the last two are equivalent - a list is automatically converted to
220 a list reference for syntactic convenience. i.e. you can omit the outer
221 "[]"
222
223 You can mix and match arrays, array refs, and PDLs in your argument
224 list, and "pdl" will sort them out. You get back a PDL whose last
225 (slowest running) dim runs across the top level of the list you hand
226 in, and whose first (fastest running) dim runs across the deepest level
227 that you supply.
228
229 At the moment, you cannot mix and match those arguments with string
230 arguments, though we can't imagine a situation in which you would
231 really want to do that.
232
233 The string version of pdl also allows you to use the strings "bad",
234 "inf", and "nan", and it will insert the values that you mean (and set
235 the bad flag if you use "bad"). You can mix and match case, though you
236 shouldn't. Here are some examples:
237
238 $bad = pdl q[1 2 3 bad 5 6]; # Set fourth element to the bad value
239 $bad = pdl q[1 2 3 BAD 5 6]; # ditto
240 $bad = pdl q[1 2 inf bad 5]; # now third element is IEEE infinite value
241 $bad = pdl q[nan 2 inf -inf]; # first value is IEEE nan value
242
243 The default constructor uses IEEE double-precision floating point
244 numbers. You can use other types, but you will get a warning if you try
245 to use "nan" with integer types (it will be replaced with the "bad"
246 value) and you will get a fatal error if you try to use "inf".
247
248 Throwing a PDL into the mix has the same effect as throwing in a list
249 ref:
250
251 pdl(pdl(1,2),[3,4])
252
253 is the same as
254
255 pdl([1,2],[3,4]).
256
257 All of the dimensions in the list are "padded-out" with undefval to
258 meet the widest dim in the list, so (e.g.)
259
260 $a = pdl([[1,2,3],[2]])
261
262 gives you the same answer as
263
264 $a = pdl([[1,2,3],[2,undef,undef]]);
265
266 If your PDL module has bad values compiled into it (see PDL::Bad), you
267 can pass BAD values into the constructor within pre-existing PDLs. The
268 BAD values are automatically kept BAD and propagated correctly.
269
270 "pdl()" is a functional synonym for the 'new' constructor, e.g.:
271
272 $x = new PDL [1..10];
273
274 In order to control how undefs are handled in converting from perl
275 lists to PDLs, one can set the variable $PDL::undefval. For example:
276
277 $foo = [[1,2,undef],[undef,3,4]];
278 $PDL::undefval = -999;
279 $f = pdl $foo;
280 print $f
281 [
282 [ 1 2 -999]
283 [-999 3 4]
284 ]
285
286 $PDL::undefval defaults to zero.
287
288 As a final note, if you include an Empty PDL in the list of objects to
289 construct into a PDL, it is kept as a placeholder pane -- so if you
290 feed in (say) 7 objects, you get a size of 7 in the 0th dim of the
291 output PDL. The placeholder panes are completely padded out. But if
292 you feed in only a single Empty PDL, you get back the Empty PDL (no
293 padding).
294
295 null
296 Returns a 'null' piddle.
297
298 $x = null;
299
300 "null()" has a special meaning to PDL::PP. It is used to flag a special
301 kind of empty piddle, which can grow to appropriate dimensions to store
302 a result (as opposed to storing a result in an existing piddle).
303
304 pdl> sumover sequence(10,10), $ans=null;p $ans
305 [45 145 245 345 445 545 645 745 845 945]
306
307 nullcreate
308 Returns a 'null' piddle.
309
310 $x = PDL->nullcreate($arg)
311
312 This is an routine used by many of the threading primitives (i.e.
313 sumover, minimum, etc.) to generate a null piddle for the function's
314 output that will behave properly for derived (or subclassed) PDL
315 objects.
316
317 For the above usage: If $arg is a PDL, or a derived PDL, then
318 "$arg->null" is returned. If $arg is a scalar (i.e. a zero-dimensional
319 PDL) then "PDL->null" is returned.
320
321 PDL::Derived->nullcreate(10)
322 returns PDL::Derived->null.
323 PDL->nullcreate($pdlderived)
324 returns $pdlderived->null.
325
326 nelem
327 Return the number of elements in a piddle
328
329 $n = nelem($piddle); $n = $piddle->nelem;
330
331 $mean = sum($data)/nelem($data);
332
333 dims
334 Return piddle dimensions as a perl list
335
336 @dims = $piddle->dims; @dims = dims($piddle);
337
338 pdl> p @tmp = dims zeroes 10,3,22
339 10 3 22
340
341 See also shape which returns a piddle instead.
342
343 shape
344 Return piddle dimensions as a piddle
345
346 $shape = $piddle->shape; $shape = shape($piddle);
347
348 pdl> p $shape = shape zeroes 10,3,22
349 [10 3 22]
350
351 See also dims which returns a perl list.
352
353 ndims
354 Returns the number of dimensions in a piddle. Alias for getndims.
355
356 getndims
357 Returns the number of dimensions in a piddle
358
359 $ndims = $piddle->getndims;
360
361 pdl> p zeroes(10,3,22)->getndims
362 3
363
364 dim
365 Returns the size of the given dimension of a piddle. Alias for getdim.
366
367 getdim
368 Returns the size of the given dimension.
369
370 $dim0 = $piddle->getdim(0);
371
372 pdl> p zeroes(10,3,22)->getdim(1)
373 3
374
375 Negative indices count from the end of the dims array. Indices beyond
376 the end will return a size of 1. This reflects the idea that any pdl is
377 equivalent to an infinitely dimensional array in which only a finite
378 number of dimensions have a size different from one. For example, in
379 that sense a 3D piddle of shape [3,5,2] is equivalent to a
380 [3,5,2,1,1,1,1,1,....] piddle. Accordingly,
381
382 print $a->getdim(10000);
383
384 will print 1 for most practically encountered piddles.
385
386 topdl
387 alternate piddle constructor - ensures arg is a piddle
388
389 $a = topdl(SCALAR|ARRAY REFERENCE|ARRAY);
390
391 The difference between pdl() and "topdl()" is that the latter will just
392 'fall through' if the argument is already a piddle. It will return a
393 reference and NOT a new copy.
394
395 This is particularly useful if you are writing a function which is
396 doing some fiddling with internals and assumes a piddle argument (e.g.
397 for method calls). Using "topdl()" will ensure nothing breaks if passed
398 with '2'.
399
400 Note that "topdl()" is not exported by default (see example below for
401 usage).
402
403 use PDL::Core ':Internal'; # use the internal routines of
404 # the Core module
405
406 $a = topdl 43; # $a is piddle with value '43'
407 $b = topdl $piddle; # fall through
408 $a = topdl (1,2,3,4); # Convert 1D array
409
410 get_datatype
411 Internal: Return the numeric value identifying the piddle datatype
412
413 $x = $piddle->get_datatype;
414
415 Mainly used for internal routines.
416
417 NOTE: get_datatype returns 'just a number' not any special type object,
418 unlike type.
419
420 howbig
421 Returns the sizeof a piddle datatype in bytes.
422
423 Note that "howbig()" is not exported by default (see example below for
424 usage).
425
426 use PDL::Core ':Internal'; # use the internal routines of
427 # the Core module
428
429 $size = howbig($piddle->get_datatype);
430
431 Mainly used for internal routines.
432
433 NOTE: NOT a method! This is because get_datatype returns 'just a
434 number' not any special object.
435
436 pdl> p howbig(ushort([1..10])->get_datatype)
437 2
438
439 get_dataref
440 Return the internal data for a piddle, as a perl SCALAR ref.
441
442 Most piddles hold their internal data in a packed perl string, to take
443 advantage of perl's memory management. This gives you direct access to
444 the string, which is handy when you need to manipulate the binary data
445 directly (e.g. for file I/O). If you modify the string, you'll need to
446 call upd_data afterward, to make sure that the piddle points to the new
447 location of the underlying perl variable.
448
449 Calling "get_dataref" automatically physicalizes your piddle (see
450 make_physical). You definitely don't want to do anything to the SV to
451 truncate or deallocate the string, unless you correspondingly call
452 reshape to make the PDL match its new data dimension.
453
454 You definitely don't want to use get_dataref unless you know what you
455 are doing (or are trying to find out): you can end up scrozzling memory
456 if you shrink or eliminate the string representation of the variable.
457 Here be dragons.
458
459 upd_data
460 Update the data pointer in a piddle to match its perl SV.
461
462 This is useful if you've been monkeying with the packed string
463 representation of the PDL, which you probably shouldn't be doing
464 anyway. (see get_dataref.)
465
466 threadids
467 Returns the piddle thread IDs as a perl list
468
469 Note that "threadids()" is not exported by default (see example below
470 for usage).
471
472 use PDL::Core ':Internal'; # use the internal routines of
473 # the Core module
474
475 @ids = threadids $piddle;
476
477 doflow
478 Turn on/off dataflow
479
480 $x->doflow; doflow($x);
481
482 flows
483 Whether or not a piddle is indulging in dataflow
484
485 something if $x->flows; $hmm = flows($x);
486
487 new
488 new piddle constructor method
489
490 $x = PDL->new(SCALAR|ARRAY|ARRAY REF|STRING);
491
492 $x = PDL->new(42); # new from a Perl scalar
493 $x = new PDL 42; # ditto
494 $y = PDL->new(@list_of_vals); # new from Perl list
495 $y = new PDL @list_of_vals; # ditto
496 $z = PDL->new(\@list_of_vals); # new from Perl list reference
497 $w = PDL->new("[1 2 3]"); # new from Perl string, using
498 # Matlab constructor syntax
499
500 Constructs piddle from perl numbers and lists and strings with
501 Matlab/Octave style constructor syntax.
502
503 The string input is fairly versatile though not performance optimized.
504 The goal is to make it easy to copy and paste code from PDL output and
505 to offer a familiar Matlab syntax for piddle construction. As of May,
506 2010, it is a new feature, so feel free to report bugs or suggest new
507 features. See documentation for pdl for more examples of usage.
508
509 copy
510 Make a physical copy of a piddle
511
512 $new = $old->copy;
513
514 Since "$new = $old" just makes a new reference, the "copy" method is
515 provided to allow real independent copies to be made.
516
517 hdr_copy
518 Return an explicit copy of the header of a PDL.
519
520 hdr_copy is just a wrapper for the internal routine _hdr_copy, which
521 takes the hash ref itself. That is the routine which is used to make
522 copies of the header during normal operations if the hdrcpy() flag of a
523 PDL is set.
524
525 General-purpose deep copies are expensive in perl, so some simple
526 optimization happens:
527
528 If the header is a tied array or a blessed hash ref with an associated
529 method called "copy", then that ->copy method is called. Otherwise,
530 all elements of the hash are explicitly copied. References are
531 recursively deep copied.
532
533 This routine seems to leak memory.
534
535 unwind
536 Return a piddle which is the same as the argument except that all
537 threadids have been removed.
538
539 $y = $x->unwind;
540
541 make_physical
542 Make sure the data portion of a piddle can be accessed from XS code.
543
544 $a->make_physical;
545 $a->call_my_xs_method;
546
547 Ensures that a piddle gets its own allocated copy of data. This
548 obviously implies that there are certain piddles which do not have
549 their own data. These are so called virtual piddles that make use of
550 the vaffine optimisation (see PDL::Indexing). They do not have their
551 own copy of data but instead store only access information to some (or
552 all) of another piddle's data.
553
554 Note: this function should not be used unless absolutely necessary
555 since otherwise memory requirements might be severly increased. Instead
556 of writing your own XS code with the need to call "make_physical" you
557 might want to consider using the PDL preprocessor (see PDL::PP) which
558 can be used to transparently access virtual piddles without the need to
559 physicalise them (though there are exceptions).
560
561 dummy
562 Insert a 'dummy dimension' of given length (defaults to 1)
563
564 No relation to the 'Dungeon Dimensions' in Discworld!
565
566 Negative positions specify relative to last dimension, i.e. "dummy(-1)"
567 appends one dimension at end, "dummy(-2)" inserts a dummy dimension in
568 front of the last dim, etc.
569
570 If you specify a dimension position larger than the existing dimension
571 list of your PDL, the PDL gets automagically padded with extra dummy
572 dimensions so that you get the dim you asked for, in the slot you asked
573 for. This could cause you trouble if, for example, you ask for
574 $a->dummy(5000,1) because $a will get 5,000 dimensions, each of rank 1.
575
576 Because padding at the beginning of the dimension list moves existing
577 dimensions from slot to slot, it's considered unsafe, so automagic
578 padding doesn't work for large negative indices -- only for large
579 positive indices.
580
581 $y = $x->dummy($position[,$dimsize]);
582
583 pdl> p sequence(3)->dummy(0,3)
584 [
585 [0 0 0]
586 [1 1 1]
587 [2 2 2]
588 ]
589
590 pdl> p sequence(3)->dummy(3,2)
591 [
592 [
593 [0 1 2]
594 ]
595 [
596 [0 1 2]
597 ]
598 ]
599
600 pdl> p sequence(3)->dummy(-3,2)
601 Runtime error: PDL: For safety, <pos> < -(dims+1) forbidden in dummy. min=-2, pos=-3
602
603 clump
604 "clumps" several dimensions into one large dimension
605
606 If called with one argument $n clumps the first $n dimensions into one.
607 For example, if $a has dimensions "(5,3,4)" then after
608
609 $b = $a->clump(2); # Clump 2 first dimensions
610
611 the variable $b will have dimensions "(15,4)" and the element
612 "$b->at(7,3)" refers to the element "$a->at(1,2,3)".
613
614 Use "clump(-1)" to flatten a piddle. The method flat is provided as a
615 convenient alias.
616
617 Clumping with a negative dimension in general leaves that many
618 dimensions behind -- e.g. clump(-2) clumps all of the first few
619 dimensions into a single one, leaving a 2-D piddle.
620
621 If "clump" is called with an index list with more than one element it
622 is treated as a list of dimensions that should be clumped together into
623 one. The resulting clumped dim is placed at the position of the lowest
624 index in the list. This convention ensures that "clump" does the
625 expected thing in the usual cases. The following example demonstrates
626 typical usage:
627
628 $a = sequence 2,3,3,3,5; # 5D piddle
629 $c = $a->clump(1..3); # clump all the dims 1 to 3 into one
630 print $c->info; # resulting 3D piddle has clumped dim at pos 1
631 PDL: Double D [2,27,5]
632
633 thread_define
634 define functions that support threading at the perl level
635
636 thread_define 'tline(a(n);b(n))', over {
637 line $_[0], $_[1]; # make line compliant with threading
638 };
639
640 "thread_define" provides some support for threading (see PDL::Indexing)
641 at the perl level. It allows you to do things for which you normally
642 would have resorted to PDL::PP (see PDL::PP); however, it is most
643 useful to wrap existing perl functions so that the new routine supports
644 PDL threading.
645
646 "thread_define" is used to define new threading aware functions. Its
647 first argument is a symbolic repesentation of the new function to be
648 defined. The string is composed of the name of the new function
649 followed by its signature (see PDL::Indexing and PDL::PP) in
650 parentheses. The second argument is a subroutine that will be called
651 with the slices of the actual runtime arguments as specified by its
652 signature. Correct dimension sizes and minimal number of dimensions for
653 all arguments will be checked (assuming the rules of PDL threading, see
654 PDL::Indexing).
655
656 The actual work is done by the "signature" class which parses the
657 signature string, does runtime dimension checks and the routine
658 "threadover" that generates the loop over all appropriate slices of pdl
659 arguments and creates pdls as needed.
660
661 Similar to "pp_def" and its "OtherPars" option it is possible to define
662 the new function so that it accepts normal perl args as well as
663 piddles. You do this by using the "NOtherPars" parameter in the
664 signature. The number of "NOtherPars" specified will be passed
665 unaltered into the subroutine given as the second argument of
666 "thread_define". Let's illustrate this with an example:
667
668 PDL::thread_define 'triangles(inda();indb();indc()), NOtherPars => 2',
669 PDL::over {
670 ${$_[3]} .= $_[4].join(',',map {$_->at} @_[0..2]).",-1,\n";
671 };
672
673 This defines a function "triangles" that takes 3 piddles as input plus
674 2 arguments which are passed into the routine unaltered. This routine
675 is used to collect lists of indices into a perl scalar that is passed
676 by reference. Each line is preceded by a prefix passed as $_[4]. Here
677 is typical usage:
678
679 $txt = '';
680 triangles(pdl(1,2,3),pdl(1),pdl(0),\$txt," "x10);
681 print $txt;
682
683 resulting in the following output
684
685 1,1,0,-1,
686 2,1,0,-1,
687 3,1,0,-1,
688
689 which is used in PDL::Graphics::TriD::VRML to generate VRML output.
690
691 Currently, this is probably not much more than a POP (proof of
692 principle) but is hoped to be useful enough for some real life work.
693
694 Check PDL::PP for the format of the signature. Currently, the "[t]"
695 qualifier and all type qualifiers are ignored.
696
697 thread
698 Use explicit threading over specified dimensions (see also
699 PDL::Indexing)
700
701 $b = $a->thread($dim,[$dim1,...])
702
703 $a = zeroes 3,4,5;
704 $b = $a->thread(2,0);
705
706 Same as PDL::thread1, i.e. uses thread id 1.
707
708 diagonal
709 Returns the multidimensional diagonal over the specified dimensions.
710
711 $d = $x->diagonal(dim1, dim2,...)
712
713 pdl> $a = zeroes(3,3,3);
714 pdl> ($b = $a->diagonal(0,1))++;
715 pdl> p $a
716 [
717 [
718 [1 0 0]
719 [0 1 0]
720 [0 0 1]
721 ]
722 [
723 [1 0 0]
724 [0 1 0]
725 [0 0 1]
726 ]
727 [
728 [1 0 0]
729 [0 1 0]
730 [0 0 1]
731 ]
732 ]
733
734 thread1
735 Explicit threading over specified dims using thread id 1.
736
737 $xx = $x->thread1(3,1)
738
739 Wibble
740
741 Convenience function interfacing to PDL::Slices::threadI.
742
743 thread2
744 Explicit threading over specified dims using thread id 2.
745
746 $xx = $x->thread2(3,1)
747
748 Wibble
749
750 Convenience function interfacing to PDL::Slices::threadI.
751
752 thread3
753 Explicit threading over specified dims using thread id 3.
754
755 $xx = $x->thread3(3,1)
756
757 Wibble
758
759 Convenience function interfacing to PDL::Slices::threadI.
760
761 sever
762 sever any links of this piddle to parent piddles
763
764 In PDL it is possible for a piddle to be just another view into another
765 piddle's data. In that case we call this piddle a virtual piddle and
766 the original piddle owning the data its parent. In other languages
767 these alternate views sometimes run by names such as alias or smart
768 reference.
769
770 Typical functions that return such piddles are "slice", "xchg",
771 "index", etc. Sometimes, however, you would like to separate the
772 virtual piddle from its parent's data and just give it a life of its
773 own (so that manipulation of its data doesn't change the parent). This
774 is simply achieved by using "sever". For example,
775
776 $a = $pdl->index(pdl(0,3,7))->sever;
777 $a++; # important: $pdl is not modified!
778
779 In many (but not all) circumstances it acts therefore similar to copy.
780 However, in general performance is better with "sever" and secondly,
781 "sever" doesn't lead to futile copying when used on piddles that
782 already have their own data. On the other hand, if you really want to
783 make sure to work on a copy of a piddle use copy.
784
785 $a = zeroes(20);
786 $a->sever; # NOOP since $a is already its own boss!
787
788 Again note: "sever" is not the same as copy! For example,
789
790 $a = zeroes(1); # $a does not have a parent, i.e. it is not a slice etc
791 $b = $a->sever; # $b is now pointing to the same piddle as $a
792 $b++;
793 print $a;
794 [1]
795
796 but
797
798 $a = zeroes(1);
799 $b = $a->copy; # $b is now pointing to a new piddle
800 $b++;
801 print $a;
802 [0]
803
804 info
805 Return formatted information about a piddle.
806
807 $x->info($format_string);
808
809 print $x->info("Type: %T Dim: %-15D State: %S");
810
811 Returns a string with info about a piddle. Takes an optional argument
812 to specify the format of information a la sprintf. Format specifiers
813 are in the form "%<width><letter>" where the width is optional and the
814 letter is one of
815
816 T Type
817
818 D Formatted Dimensions
819
820 F Dataflow status
821
822 S Some internal flags (P=physical,V=Vaffine,C=changed,B=may
823 contain bad data)
824
825 C Class of this piddle, i.e. "ref $pdl"
826
827 A Address of the piddle struct as a unique identifier
828
829 M Calculated memory consumption of this piddle's data area
830
831 approx
832 test for approximately equal values (relaxed "==")
833
834 # ok if all corresponding values in
835 # piddles are within 1e-8 of each other
836 print "ok\n" if all approx $a, $b, 1e-8;
837
838 "approx" is a relaxed form of the "==" operator and often more
839 appropriate for floating point types ("float" and "double").
840
841 Usage:
842
843 $res = approx $a, $b [, $eps]
844
845 The optional parameter $eps is remembered across invocations and
846 initially set to 1e-6, e.g.
847
848 approx $a, $b; # last $eps used (1e-6 initially)
849 approx $a, $b, 1e-10; # 1e-10
850 approx $a, $b; # also 1e-10
851
852 mslice
853 Convenience interface to slice, allowing easier inclusion of dimensions
854 in perl code.
855
856 $a = $x->mslice(...);
857
858 # below is the same as $x->slice("5:7,:,3:4:2")
859 $a = $x->mslice([5,7],X,[3,4,2]);
860
861 nslice_if_pdl
862 If $self is a PDL, then calls "slice" with all but the last argument,
863 otherwise $self->($_[-1]) is called where $_[-1} is the original
864 argument string found during PDL::NiceSlice filtering.
865
866 DEVELOPER'S NOTE: this routine is found in Core.pm.PL but would be
867 better placed in Slices/slices.pd. It is likely to be moved there
868 and/or changed to "slice_if_pdl" for PDL 3.0.
869
870 $a = $x->nslice_if_pdl(...,'(args)');
871
872 nslice
873 c<nslice> was an internally used interface for PDL::NiceSlice, but is
874 now merely a springboard to PDL::Slice. It is deprecated and likely to
875 disappear in PDL 3.0.
876
877 inplace
878 Flag a piddle so that the next operation is done 'in place'
879
880 somefunc($x->inplace); somefunc(inplace $x);
881
882 In most cases one likes to use the syntax "$y = f($x)", however in many
883 case the operation "f()" can be done correctly 'in place', i.e. without
884 making a new copy of the data for output. To make it easy to use this,
885 we write "f()" in such a way that it operates in-place, and use
886 "inplace" to hint that a new copy should be disabled. This also makes
887 for clear syntax.
888
889 Obviously this will not work for all functions, and if in doubt see the
890 function's documentation. However one can assume this is true for all
891 elemental functions (i.e. those which just operate array element by
892 array element like "log10").
893
894 pdl> $x = xvals zeroes 10;
895 pdl> log10(inplace $x)
896 pdl> p $x
897 [-inf 0 0.30103 0.47712125 0.60205999 0.69897 0.77815125 0.84509804 0.90308999 0.95424251]
898
899 is_inplace
900 Test the in-place flag on a piddle
901
902 $out = ($in->is_inplace) ? $in : zeroes($in);
903 $in->set_inplace(0)
904
905 Provides access to the inplace hint flag, within the perl millieu.
906 That way functions you write can be inplace aware... If given an
907 argument the inplace flag will be set or unset depending on the value
908 at the same time. Can be used for shortcut tests that delete the
909 inplace flag while testing:
910
911 $out = ($in->is_inplace(0)) ? $in : zeroes($in); # test & unset!
912
913 set_inplace
914 Set the in-place flag on a piddle
915
916 $out = ($in->is_inplace) ? $in : zeroes($in);
917 $in->set_inplace(0);
918
919 Provides access to the inplace hint flag, within the perl millieu.
920 Useful mainly for turning it OFF, as inplace turns it ON more
921 conveniently.
922
923 new_or_inplace
924 $a = new_or_inplace(shift());
925 $a = new_or_inplace(shift(),$preferred_type);
926
927 Return back either the argument pdl or a copy of it depending on
928 whether it be flagged in-place or no. Handy for building inplace-aware
929 functions.
930
931 If you specify a preferred type (must be one of the usual PDL type
932 strings, a list ref containing several of them, or a string containing
933 several of them), then the copy is coerced into the first preferred
934 type listed if it is not already one of the preferred types.
935
936 Note that if the inplace flag is set, no coersion happens even if you
937 specify a preferred type.
938
939 new_from_specification
940 Internal method: create piddle by specification
941
942 This is the argument processing method called by zeroes and some other
943 functions which constructs piddles from argument lists of the form:
944
945 [type], $nx, $ny, $nz,...
946
947 For $nx, $ny, etc. 0 and 1D piddles are allowed. Giving those has the
948 same effect as if saying "$arg->list", e.g.
949
950 1, pdl(5,2), 4
951
952 is equivalent to
953
954 1, 5, 2, 4
955
956 Note, however, that in all functions using "new_from_specification"
957 calling "func $piddle" will probably not do what you want. So to play
958 safe use (e.g. with zeroes)
959
960 $pdl = zeroes $dimpdl->list;
961
962 Calling
963
964 $pdl = zeroes $dimpdl;
965
966 will rather be equivalent to
967
968 $pdl = zeroes $dimpdl->dims;
969
970 However,
971
972 $pdl = zeroes ushort, $dimpdl;
973
974 will again do what you intended since it is interpreted as if you had
975 said
976
977 $pdl = zeroes ushort, $dimpdl->list;
978
979 This is unfortunate and confusing but no good solution seems obvious
980 that would not break existing scripts.
981
982 isnull
983 Test whether a piddle is null
984
985 croak("Input piddle mustn't be null!")
986 if $input_piddle->isnull;
987
988 This function returns 1 if the piddle is null, zero if it is not. The
989 purpose of null piddles is to "tell" any PDL::PP methods to allocate
990 new memory for an output piddle, but only when that PDL::PP method is
991 called in full-arg form. Of course, there's no reason you couldn't
992 commandeer the special value for your own purposes, for which this test
993 function would prove most helpful. But in general, you shouldn't need
994 to test for a piddle's nullness.
995
996 See "Null PDLs" for more information.
997
998 isempty
999 Test whether a piddle is empty
1000
1001 print "The piddle has zero dimension\n" if $pdl->isempty;
1002
1003 This function returns 1 if the piddle has zero elements. This is useful
1004 in particular when using the indexing function which. In the case of no
1005 match to a specified criterion, the returned piddle has zero dimension.
1006
1007 pdl> $a=sequence(10)
1008 pdl> $i=which($a < -1)
1009 pdl> print "I found no matches!\n" if ($i->isempty);
1010 I found no matches!
1011
1012 Note that having zero elements is rather different from the concept of
1013 being a null piddle, see the PDL::FAQ and PDL::Indexing manpages for
1014 discussions of this.
1015
1016 zeroes
1017 construct a zero filled piddle from dimension list or template piddle.
1018
1019 Various forms of usage,
1020
1021 (i) by specification or (ii) by template piddle:
1022
1023 # usage type (i):
1024 $a = zeroes([type], $nx, $ny, $nz,...);
1025 $a = PDL->zeroes([type], $nx, $ny, $nz,...);
1026 $a = $pdl->zeroes([type], $nx, $ny, $nz,...);
1027 # usage type (ii):
1028 $a = zeroes $b;
1029 $a = $b->zeroes
1030 zeroes inplace $a; # Equivalent to $a .= 0;
1031 $a->inplace->zeroes; # ""
1032
1033 pdl> $z = zeroes 4,3
1034 pdl> p $z
1035 [
1036 [0 0 0 0]
1037 [0 0 0 0]
1038 [0 0 0 0]
1039 ]
1040 pdl> $z = zeroes ushort, 3,2 # Create ushort array
1041 [ushort() etc. with no arg returns a PDL::Types token]
1042
1043 See also new_from_specification for details on using piddles in the
1044 dimensions list.
1045
1046 zeros
1047 construct a zero filled piddle (see zeroes for usage)
1048
1049 ones
1050 construct a one filled piddle
1051
1052 $a = ones([type], $nx, $ny, $nz,...);
1053 etc. (see 'zeroes')
1054
1055 see zeroes() and add one
1056
1057 See also new_from_specification for details on using piddles in the
1058 dimensions list.
1059
1060 reshape
1061 Change the shape (i.e. dimensions) of a piddle, preserving contents.
1062
1063 $x->reshape(NEWDIMS); reshape($x, NEWDIMS);
1064
1065 The data elements are preserved, obviously they will wrap differently
1066 and get truncated if the new array is shorter. If the new array is
1067 longer it will be zero-padded.
1068
1069 ***Potential incompatibility with earlier versions of PDL**** If the
1070 list of "NEWDIMS" is empty "reshape" will just drop all dimensions of
1071 size 1 (preserving the number of elements):
1072
1073 $a = sequence(3,4,5);
1074 $b = $a(1,3);
1075 $b->reshape();
1076 print $b->info;
1077 PDL: Double D [5]
1078
1079 Dimensions of size 1 will also be dropped if "reshape" is invoked with
1080 the argument -1:
1081
1082 $b = $a->reshape(-1);
1083
1084 As opposed to "reshape" without arguments, "reshape(-1)" preserves
1085 dataflow:
1086
1087 $a = ones(2,1,2);
1088 $b = $a(0)->reshape(-1);
1089 $b++;
1090 print $a;
1091 [
1092 [
1093 [2 1]
1094 ]
1095 [
1096 [2 1]
1097 ]
1098 ]
1099
1100 Important: Piddles are changed inplace!
1101
1102 Note: If $x is connected to any other PDL (e.g. if it is a slice) then
1103 the connection is first severed.
1104
1105 pdl> $x = sequence(10)
1106 pdl> reshape $x,3,4; p $x
1107 [
1108 [0 1 2]
1109 [3 4 5]
1110 [6 7 8]
1111 [9 0 0]
1112 ]
1113 pdl> reshape $x,5; p $x
1114 [0 1 2 3 4]
1115
1116 squeeze
1117 eliminate all singleton dimensions (dims of size 1)
1118
1119 $b = $a(0,0)->squeeze;
1120
1121 Alias for "reshape(-1)". Removes all singleton dimensions and preserves
1122 dataflow. A more concise interface is provided by PDL::NiceSlice via
1123 modifiers:
1124
1125 use PDL::NiceSlice;
1126 $b = $a(0,0;-); # same as $a(0,0)->squeeze
1127
1128 flat
1129 flatten a piddle (alias for "$pdl->clump(-1)")
1130
1131 $srt = $pdl->flat->qsort;
1132
1133 Useful method to make a 1D piddle from an arbitrarily sized input
1134 piddle. Data flows back and forth as usual with slicing routines.
1135 Falls through if argument already <= 1D.
1136
1137 convert
1138 Generic datatype conversion function
1139
1140 $y = convert($x, $newtypenum);
1141
1142 $y = convert $x, long
1143 $y = convert $x, ushort
1144
1145 $newtype is a type number, for convenience they are returned by
1146 "long()" etc when called without arguments.
1147
1148 Datatype_conversions
1149 byte|short|ushort|long|indx|longlong|float|double (shorthands to
1150 convert datatypes)
1151
1152 $y = double $x; $y = ushort [1..10];
1153 # all of the above listed shorthands behave similarly
1154
1155 When called with a piddle argument, they convert to the specific
1156 datatype.
1157
1158 When called with a numeric, list, listref, or string argument they
1159 construct a new piddle. This is a convenience to avoid having to be
1160 long-winded and say "$x = long(pdl(42))"
1161
1162 Thus one can say:
1163
1164 $a = float(1,2,3,4); # 1D
1165 $a = float q[1 2 3; 4 5 6]; # 2D
1166 $a = float([1,2,3],[4,5,6]); # 2D
1167 $a = float([[1,2,3],[4,5,6]]); # 2D
1168
1169 Note the last three give identical results, and the last two are
1170 exactly equivalent - a list is automatically converted to a list
1171 reference for syntactic convenience. i.e. you can omit the outer "[]"
1172
1173 When called with no arguments, these functions return a special type
1174 token. This allows syntactical sugar like:
1175
1176 $x = ones byte, 1000,1000;
1177
1178 This example creates a large piddle directly as byte datatype in order
1179 to save memory.
1180
1181 In order to control how undefs are handled in converting from perl
1182 lists to PDLs, one can set the variable $PDL::undefval; see the
1183 function pdl() for more details.
1184
1185 pdl> p $x=sqrt float [1..10]
1186 [1 1.41421 1.73205 2 2.23607 2.44949 2.64575 2.82843 3 3.16228]
1187 pdl> p byte $x
1188 [1 1 1 2 2 2 2 2 3 3]
1189
1190 byte
1191 Convert to byte datatype
1192
1193 short
1194 Convert to short datatype
1195
1196 ushort
1197 Convert to ushort datatype
1198
1199 long
1200 Convert to long datatype
1201
1202 indx
1203 Convert to indx datatype
1204
1205 longlong
1206 Convert to longlong datatype
1207
1208 float
1209 Convert to float datatype
1210
1211 double
1212 Convert to double datatype
1213
1214 type
1215 return the type of a piddle as a blessed type object
1216
1217 A convenience function for use with the piddle constructors, e.g.
1218
1219 $b = PDL->zeroes($a->type,$a->dims,3);
1220 die "must be float" unless $a->type == float;
1221
1222 See also the discussion of the "PDL::Type" class in PDL::Types. Note
1223 that the "PDL::Type" objects have overloaded comparison and stringify
1224 operators so that you can compare and print types:
1225
1226 $a = $a->float if $a->type < float;
1227 $t = $a->type; print "Type is $t\";
1228
1229 list
1230 Convert piddle to perl list
1231
1232 @tmp = list $x;
1233
1234 Obviously this is grossly inefficient for the large datasets PDL is
1235 designed to handle. This was provided as a get out while PDL matured.
1236 It should now be mostly superseded by superior constructs, such as
1237 PP/threading. However it is still occasionally useful and is provied
1238 for backwards compatibility.
1239
1240 for (list $x) {
1241 # Do something on each value...
1242 }
1243
1244 If you compile PDL with bad value support (the default), your machine's
1245 docs will also say this:
1246
1247 list converts any bad values into the string 'BAD'.
1248
1249 unpdl
1250 Convert piddle to nested Perl array references
1251
1252 $arrayref = unpdl $x;
1253
1254 This function returns a reference to a Perl list-of-lists structure
1255 equivalent to the input piddle (within the limitation that while values
1256 of elements should be preserved, the detailed datatypes will not as
1257 perl itself basically has "number" data rather than byte, short, int...
1258 E.g., "sum($x - pdl( $x->unpdl ))" should equal 0.
1259
1260 Obviously this is grossly inefficient in memory and processing for the
1261 large datasets PDL is designed to handle. Sometimes, however, you
1262 really want to move your data back to Perl, and with proper
1263 dimensionality, unlike "list".
1264
1265 use JSON;
1266 my $json = encode_json unpdl $pdl;
1267
1268 If you compile PDL with bad value support (the default), your machine's
1269 docs will also say this:
1270
1271 unpdl converts any bad values into the string 'BAD'.
1272
1273 listindices
1274 Convert piddle indices to perl list
1275
1276 @tmp = listindices $x;
1277
1278 @tmp now contains the values "0..nelem($x)".
1279
1280 Obviously this is grossly inefficient for the large datasets PDL is
1281 designed to handle. This was provided as a get out while PDL matured.
1282 It should now be mostly superseded by superior constructs, such as
1283 PP/threading. However it is still occasionally useful and is provied
1284 for backwards compatibility.
1285
1286 for $i (listindices $x) {
1287 # Do something on each value...
1288 }
1289
1290 set
1291 Set a single value inside a piddle
1292
1293 set $piddle, @position, $value
1294
1295 @position is a coordinate list, of size equal to the number of
1296 dimensions in the piddle. Occasionally useful, mainly provided for
1297 backwards compatibility as superseded by use of slice and assignment
1298 operator ".=".
1299
1300 pdl> $x = sequence 3,4
1301 pdl> set $x, 2,1,99
1302 pdl> p $x
1303 [
1304 [ 0 1 2]
1305 [ 3 4 99]
1306 [ 6 7 8]
1307 [ 9 10 11]
1308 ]
1309
1310 at
1311 Returns a single value inside a piddle as perl scalar.
1312
1313 $z = at($piddle, @position); $z=$piddle->at(@position);
1314
1315 @position is a coordinate list, of size equal to the number of
1316 dimensions in the piddle. Occasionally useful in a general context,
1317 quite useful too inside PDL internals.
1318
1319 pdl> $x = sequence 3,4
1320 pdl> p $x->at(1,2)
1321 7
1322
1323 If you compile PDL with bad value support (the default), your machine's
1324 docs will also say this:
1325
1326 at converts any bad values into the string 'BAD'.
1327
1328 sclr
1329 return a single value from a piddle as a scalar
1330
1331 $val = $a(10)->sclr;
1332 $val = sclr inner($a,$b);
1333
1334 The "sclr" method is useful to turn a piddle into a normal Perl scalar.
1335 Its main advantage over using "at" for this purpose is the fact that
1336 you do not need to worry if the piddle is 0D, 1D or higher dimensional.
1337 Using "at" you have to supply the correct number of zeroes, e.g.
1338
1339 $a = sequence(10);
1340 $b = $a->slice('4');
1341 print $b->sclr; # no problem
1342 print $b->at(); # error: needs at least one zero
1343
1344 "sclr" is generally used when a Perl scalar is required instead of a
1345 one-element piddle. If the input is a multielement piddle the first
1346 value is returned as a Perl scalar. You can optionally switch on checks
1347 to ensure that the input piddle has only one element:
1348
1349 PDL->sclr({Check => 'warn'}); # carp if called with multi-el pdls
1350 PDL->sclr({Check => 'barf'}); # croak if called with multi-el pdls
1351
1352 are the commands to switch on warnings or raise an error if a
1353 multielement piddle is passed as input. Note that these options can
1354 only be set when "sclr" is called as a class method (see example
1355 above). Use
1356
1357 PDL->sclr({Check=>0});
1358
1359 to switch these checks off again (default setting); When called as a
1360 class method the resulting check mode is returned (0: no checking, 1:
1361 warn, 2: barf).
1362
1363 cat
1364 concatenate piddles to N+1 dimensional piddle
1365
1366 Takes a list of N piddles of same shape as argument, returns a single
1367 piddle of dimension N+1.
1368
1369 pdl> $x = cat ones(3,3),zeroes(3,3),rvals(3,3); p $x
1370 [
1371 [
1372 [1 1 1]
1373 [1 1 1]
1374 [1 1 1]
1375 ]
1376 [
1377 [0 0 0]
1378 [0 0 0]
1379 [0 0 0]
1380 ]
1381 [
1382 [1 1 1]
1383 [1 0 1]
1384 [1 1 1]
1385 ]
1386 ]
1387
1388 If you compile PDL with bad value support (the default), your machine's
1389 docs will also say this:
1390
1391 The output piddle is set bad if any input piddles have their bad flag
1392 set.
1393
1394 Similar functions include append, which appends only two piddles along
1395 their first dimension, and glue, which can append more than two piddles
1396 along an arbitary dimension.
1397
1398 Also consider the generic constructor pdl, which can handle piddles of
1399 different sizes (with zero-padding), and will return a piddle of type
1400 'double' by default, but may be considerably faster (up to 10x) than
1401 cat.
1402
1403 dog
1404 Opposite of 'cat' :). Split N dim piddle to list of N-1 dim piddles
1405
1406 Takes a single N-dimensional piddle and splits it into a list of N-1
1407 dimensional piddles. The breakup is done along the last dimension.
1408 Note the dataflown connection is still preserved by default, e.g.:
1409
1410 pdl> $p = ones 3,3,3
1411 pdl> ($a,$b,$c) = dog $p
1412 pdl> $b++; p $p
1413 [
1414 [
1415 [1 1 1]
1416 [1 1 1]
1417 [1 1 1]
1418 ]
1419 [
1420 [2 2 2]
1421 [2 2 2]
1422 [2 2 2]
1423 ]
1424 [
1425 [1 1 1]
1426 [1 1 1]
1427 [1 1 1]
1428 ]
1429 ]
1430
1431 Break => 1 Break dataflow connection (new copy)
1432
1433 If you compile PDL with bad value support (the default), your machine's
1434 docs will also say this:
1435
1436 The output piddles are set bad if the original piddle has its bad flag
1437 set.
1438
1439 gethdr
1440 Retrieve header information from a piddle
1441
1442 $pdl=rfits('file.fits');
1443 $h=$pdl->gethdr;
1444 print "Number of pixels in the X-direction=$$h{NAXIS1}\n";
1445
1446 The "gethdr" function retrieves whatever header information is
1447 contained within a piddle. The header can be set with sethdr and is
1448 always a hash reference or undef.
1449
1450 "gethdr" returns undef if the piddle has not yet had a header defined;
1451 compare with "hdr" and "fhdr", which are guaranteed to return a defined
1452 value.
1453
1454 Note that gethdr() works by reference: you can modify the header in-
1455 place once it has been retrieved:
1456
1457 $a = rfits($filename);
1458 $ah = $a->gethdr();
1459 $ah->{FILENAME} = $filename;
1460
1461 It is also important to realise that in most cases the header is not
1462 automatically copied when you copy the piddle. See hdrcpy to enable
1463 automatic header copying.
1464
1465 Here's another example: a wrapper around rcols that allows your piddle
1466 to remember the file it was read from and the columns could be easily
1467 written (here assuming that no regexp is needed, extensions are left as
1468 an exercise for the reader)
1469
1470 sub ext_rcols {
1471 my ($file, @columns)=@_;
1472 my $header={};
1473 $$header{File}=$file;
1474 $$header{Columns}=\@columns;
1475
1476 @piddles=rcols $file, @columns;
1477 foreach (@piddles) { $_->sethdr($header); }
1478 return @piddles;
1479 }
1480
1481 hdr
1482 Retrieve or set header information from a piddle
1483
1484 $pdl->hdr->{CDELT1} = 1;
1485
1486 The "hdr" function allows convenient access to the header of a piddle.
1487 Unlike "gethdr" it is guaranteed to return a defined value, so you can
1488 use it in a hash dereference as in the example. If the header does not
1489 yet exist, it gets autogenerated as an empty hash.
1490
1491 Note that this is usually -- but not always -- What You Want. If you
1492 want to use a tied Astro::FITS::Header hash, for example, you should
1493 either construct it yourself and use "sethdr" to put it into the
1494 piddle, or use fhdr instead. (Note that you should be able to write
1495 out the FITS file successfully regardless of whether your PDL has a
1496 tied FITS header object or a vanilla hash).
1497
1498 fhdr
1499 Retrieve or set FITS header information from a piddle
1500
1501 $pdl->fhdr->{CDELT1} = 1;
1502
1503 The "fhdr" function allows convenient access to the header of a piddle.
1504 Unlike "gethdr" it is guaranteed to return a defined value, so you can
1505 use it in a hash dereference as in the example. If the header does not
1506 yet exist, it gets autogenerated as a tied Astro::FITS::Header hash.
1507
1508 Astro::FITS::Header tied hashes are better at matching the behavior of
1509 FITS headers than are regular hashes. In particular, the hash keys are
1510 CAsE INsEnSItiVE, unlike normal hash keys. See Astro::FITS::Header for
1511 details.
1512
1513 If you do not have Astro::FITS::Header installed, you get back a normal
1514 hash instead of a tied object.
1515
1516 sethdr
1517 Set header information of a piddle
1518
1519 $pdl = zeroes(100,100);
1520 $h = {NAXIS=>2, NAXIS1=>100, NAXIS=>100, COMMENT=>"Sample FITS-style header"};
1521 # add a FILENAME field to the header
1522 $$h{FILENAME} = 'file.fits';
1523 $pdl->sethdr( $h );
1524
1525 The "sethdr" function sets the header information for a piddle. You
1526 must feed in a hash ref or undef, and the header field of the PDL is
1527 set to be a new ref to the same hash (or undefined).
1528
1529 The hash ref requirement is a speed bump put in place since the normal
1530 use of headers is to store fits header information and the like. Of
1531 course, if you want you can hang whatever ugly old data structure you
1532 want off of the header, but that makes life more complex.
1533
1534 Remember that the hash is not copied -- the header is made into a ref
1535 that points to the same underlying data. To get a real copy without
1536 making any assumptions about the underlying data structure, you can use
1537 one of the following:
1538
1539 use PDL::IO::Dumper;
1540 $pdl->sethdr( deep_copy($h) );
1541
1542 (which is slow but general), or
1543
1544 $pdl->sethdr( PDL::_hdr_copy($h) )
1545
1546 (which uses the built-in sleazy deep copier), or (if you know that all
1547 the elements happen to be scalars):
1548
1549 { my %a = %$h;
1550 $pdl->sethdr(\%a);
1551 }
1552
1553 which is considerably faster but just copies the top level.
1554
1555 The "sethdr" function must be given a hash reference or undef. For
1556 further information on the header, see gethdr, hdr, fhdr and hdrcpy.
1557
1558 hdrcpy
1559 switch on/off/examine automatic header copying
1560
1561 print "hdrs will be copied" if $a->hdrcpy;
1562 $a->hdrcpy(1); # switch on automatic header copying
1563 $b = $a->sumover; # and $b will inherit $a's hdr
1564 $a->hdrcpy(0); # and now make $a non-infectious again
1565
1566 "hdrcpy" without an argument just returns the current setting of the
1567 flag. See also "hcpy" which returns its PDL argument (and so is useful
1568 in method-call pipelines).
1569
1570 Normally, the optional header of a piddle is not copied automatically
1571 in pdl operations. Switching on the hdrcpy flag using the "hdrcpy"
1572 method will enable automatic hdr copying. Note that an actual deep copy
1573 gets made, which is rather processor-inefficient -- so avoid using
1574 header copying in tight loops!
1575
1576 Most PDLs have the "hdrcpy" flag cleared by default; however, some
1577 routines (notably rfits) set it by default where that makes more sense.
1578
1579 The "hdrcpy" flag is viral: if you set it for a PDL, then derived PDLs
1580 will get copies of the header and will also have their "hdrcpy" flags
1581 set. For example:
1582
1583 $a = xvals(50,50);
1584 $a->hdrcpy(1);
1585 $a->hdr->{FOO} = "bar";
1586 $b = $a++;
1587 $c = $b++;
1588 print $b->hdr->{FOO}, " - ", $c->hdr->{FOO}, "\n";
1589 $b->hdr->{FOO} = "baz";
1590 print $a->hdr->{FOO}, " - ", $b->hdr->{FOO}, " - ", $c->hdr->{FOO}, "\n";
1591
1592 will print:
1593
1594 bar - bar
1595 bar - baz - bar
1596
1597 Performing an operation in which more than one PDL has its hdrcpy flag
1598 causes the resulting PDL to take the header of the first PDL:
1599
1600 ($a,$b) = sequence(5,2)->dog;
1601 $a->hdrcpy(1); $b->hdrcpy(1);
1602 $a->hdr->{foo} = 'a';
1603 $b->hdr->{foo} = 'b';
1604 print (($a+$b)->hdr->{foo} , ($b+$a)->hdr->{foo});
1605
1606 will print:
1607
1608 a b
1609
1610 hcpy
1611 Switch on/off automatic header copying, with PDL pass-through
1612
1613 $a = rfits('foo.fits')->hcpy(0);
1614 $a = rfits('foo.fits')->hcpy(1);
1615
1616 "hcpy" sets or clears the hdrcpy flag of a PDL, and returns the PDL
1617 itself. That makes it convenient for inline use in expressions.
1618
1619 set_autopthread_targ
1620 Set the target number of processor threads (pthreads) for multi-
1621 threaded processing.
1622
1623 set_autopthread_targ($num_pthreads);
1624
1625 $num_pthreads is the target number of pthreads the auto-pthread process
1626 will try to achieve.
1627
1628 See PDL::ParallelCPU for an overview of the auto-pthread process.
1629
1630 # Example turning on auto-pthreading for a target of 2 pthreads and for functions involving
1631 # PDLs with greater than 1M elements
1632 set_autopthread_targ(2);
1633 set_autopthread_size(1);
1634
1635 # Execute a pdl function, processing will split into two pthreads as long as
1636 # one of the pdl-threaded dimensions is divisible by 2.
1637 $a = minimum($b);
1638
1639 # Get the actual number of pthreads that were run.
1640 $actual_pthread = get_autopthread_actual();
1641
1642 get_autopthread_targ
1643 Get the current target number of processor threads (pthreads) for
1644 multi-threaded processing.
1645
1646 $num_pthreads = get_autopthread_targ();
1647
1648 $num_pthreads is the target number of pthreads the auto-pthread process
1649 will try to achieve.
1650
1651 See PDL::ParallelCPU for an overview of the auto-pthread process.
1652
1653 get_autopthread_actual
1654 Get the actual number of pthreads executed for the last pdl processing
1655 function.
1656
1657 $autopthread_actual = get_autopthread_actual();
1658
1659 $autopthread_actual is the actual number of pthreads executed for the
1660 last pdl processing function.
1661
1662 See PDL::ParallelCPU for an overview of the auto-pthread process.
1663
1664 set_autopthread_size
1665 Set the minimum size (in M-elements or 2^20 elements) of the largest
1666 PDL involved in a function where auto-pthreading will be performed. For
1667 small PDLs, it probably isn't worth starting multiple pthreads, so this
1668 function is used to define a minimum threshold where auto-pthreading
1669 won't be attempted.
1670
1671 set_autopthread_size($size);
1672
1673 $size is the mimumum size, in M-elements or 2^20 elements (approx 1e6
1674 elements) for the largest PDL involved in a function.
1675
1676 See PDL::ParallelCPU for an overview of the auto-pthread process.
1677
1678 # Example turning on auto-pthreading for a target of 2 pthreads and for functions involving
1679 # PDLs with greater than 1M elements
1680 set_autopthread_targ(2);
1681 set_autopthread_size(1);
1682
1683 # Execute a pdl function, processing will split into two pthreads as long as
1684 # one of the pdl-threaded dimensions is divisible by 2.
1685 $a = minimum($b);
1686
1687 # Get the actual number of pthreads that were run.
1688 $actual_pthread = get_autopthread_actual();
1689
1690 get_autopthread_size
1691 Get the current autopthread_size setting.
1692
1693 $autopthread_size = get_autopthread_size();
1694
1695 $autopthread_size is the mimumum size limit for auto_pthreading to
1696 occur, in M-elements or 2^20 elements (approx 1e6 elements) for the
1697 largest PDL involved in a function
1698
1699 See PDL::ParallelCPU for an overview of the auto-pthread process.
1700
1702 Copyright (C) Karl Glazebrook (kgb@aaoepp.aao.gov.au), Tuomas J. Lukka,
1703 (lukka@husc.harvard.edu) and Christian Soeller
1704 (c.soeller@auckland.ac.nz) 1997. Modified, Craig DeForest
1705 (deforest@boulder.swri.edu) 2002. All rights reserved. There is no
1706 warranty. You are allowed to redistribute this software / documentation
1707 under certain conditions. For details, see the file COPYING in the PDL
1708 distribution. If this file is separated from the PDL distribution, the
1709 copyright notice should be included in the file.
1710
1711
1712
1713perl v5.30.0 2019-09-05 Core(3)