ນີ້ແມ່ນຄໍາສັ່ງ PDL::QuickStartp ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
PDL::QuickStart - ການແນະນໍາດ່ວນກ່ຽວກັບຄຸນສົມບັດ PDL.
ສະຫຼຸບສັງລວມ
ສະຫຼຸບໂດຍຫຍໍ້ຂອງລັກສະນະ PDL ຕົ້ນຕໍແລະວິທີການນໍາໃຊ້ພວກມັນ.
ລາຍລະອຽດ
ການນໍາສະເຫນີ
Perl ເປັນພາສາສະຄຣິບທີ່ດີທີ່ສຸດແລະ versatile, ເຫມາະສົມກັບຜູ້ເລີ່ມຕົ້ນແລະ
ອະນຸຍາດໃຫ້ສ້າງຕົວແບບຢ່າງໄວ. ຢ່າງໃດກໍຕາມ, ຈົນກ່ວາບໍ່ດົນມານີ້, ມັນບໍ່ໄດ້ສະຫນັບສະຫນູນໂຄງສ້າງຂໍ້ມູນ
ອະນຸຍາດໃຫ້ມັນເພື່ອເຮັດໃຫ້ຈໍານວນໄວ crunching.
ຢ່າງໃດກໍຕາມກັບການພັດທະນາຂອງ Perl v5, Perl ໄດ້ມາ 'ວັດຖຸ'. ເພື່ອເຮັດໃຫ້ມັນງ່າຍດາຍຜູ້ໃຊ້
ສາມາດກໍານົດປະເພດຂໍ້ມູນພິເສດຂອງເຂົາເຈົ້າເອງ, ແລະຂຽນກິດຈະກໍາທີ່ກໍານົດເອງເພື່ອຈັດການໃຫ້ເຂົາເຈົ້າ
ບໍ່ວ່າຈະເປັນພາສາລະດັບຕ່ໍາ (C ແລະ Fortran) ຫຼືໃນ Perl ຕົວຂອງມັນເອງ.
ນີ້ໄດ້ຖືກຂຸດຄົ້ນຢ່າງເຕັມສ່ວນໂດຍນັກພັດທະນາ PerlDL. ໂມດູນ 'PDL' ແມ່ນສົມບູນ
Object-Oriented extension ກັບ Perl (ເຖິງແມ່ນວ່າທ່ານບໍ່ຈໍາເປັນຕ້ອງຮູ້ວ່າວັດຖຸແມ່ນຫຍັງ
ໃຊ້ມັນ) ເຊິ່ງອະນຸຍາດໃຫ້ຊຸດຂໍ້ມູນຂະຫນາດໃຫຍ່ N-dimensional, ເຊັ່ນ: ຮູບພາບຂະຫນາດໃຫຍ່, spectra, ເວລາ
ຊຸດ, ແລະອື່ນໆທີ່ຈະເກັບໄວ້ ປະສິດທິຜົນ ແລະການຫມູນໃຊ້ en ຕັ້ງມະຫາຊົນ. ຕົວຢ່າງເຊັ່ນ PDL
ໂມດູນພວກເຮົາສາມາດຂຽນລະຫັດ Perl "$a = $b + $c", ເຊິ່ງ $b ແລະ $c ເປັນຊຸດຂໍ້ມູນຂະຫນາດໃຫຍ່ (ເຊັ່ນ:
2048x2048 ຮູບພາບ), ແລະໄດ້ຮັບຜົນໄດ້ຮັບໃນພຽງແຕ່ສ່ວນຫນຶ່ງຂອງວິນາທີ.
ຕົວແປ PDL (ຫຼື 'piddles' ຍ້ອນວ່າພວກເຂົາເປັນທີ່ຮູ້ຈັກ) ສະຫນັບສະຫນູນລະດັບຄວາມກ້ວາງຂອງ
ປະເພດຂໍ້ມູນພື້ນຖານ - arrays ສາມາດເປັນ bytes, short integers (signed or unsigned), long
ຈຳນວນເຕັມ, floats ຫຼື double precision floats. ແລະເນື່ອງຈາກວ່າລັກສະນະ Object-Oriented ຂອງ
ປະເພດຂໍ້ມູນແບບປັບແຕ່ງໃໝ່ PDL ສາມາດໄດ້ມາຈາກພວກມັນ.
ເຊັ່ນດຽວກັນກັບໂມດູນ PDL, ທີ່ສາມາດນໍາໃຊ້ໄດ້ໂດຍໂຄງການ Perl ປົກກະຕິ, PerlDL ມາພ້ອມກັບ a
ເສັ້ນຄໍາສັ່ງ Perl shell, ເອີ້ນວ່າ 'perldl', ເຊິ່ງສະຫນັບສະຫນູນການແກ້ໄຂເສັ້ນຄໍາສັ່ງ. ໃນ
ປະສົມປະສານກັບໂມດູນກາຟິກ PDL ຕ່າງໆນີ້ຊ່ວຍໃຫ້ຂໍ້ມູນສາມາດຫຼີ້ນໄດ້ງ່າຍ
ກັບແລະສະແດງໃຫ້ເຫັນ.
ຊ່ວຍເຫຼືອ
PDL ປະກອບດ້ວຍເອກະສານທີ່ກວ້າງຂວາງ, ມີທັງພາຍໃນ perdl or pdl2 ຫອຍ ແລະ
ຈາກບັນທັດຄໍາສັ່ງ, ການນໍາໃຊ້ໂຄງການ "pdldoc". ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ, ພະຍາຍາມອັນໃດອັນຫນຶ່ງຈາກ:
pdl> ຊ່ວຍ
$ pdldoc
ສໍາເນົາ HTML ຂອງເອກະສານຄວນຈະມີຢູ່. ເພື່ອຊອກຫາສະຖານທີ່ຂອງເຂົາເຈົ້າ, ພະຍາຍາມ
ຕໍ່ໄປນີ້:
pdl> foreach (ແຜນທີ່{"$_/PDL/HtmlDocs"}@INC ) { p "$_\n" ຖ້າ -d $_ }
Perl ຕາຕະລາງ ແລະ ວິທີການ PDL extends ໃຫ້ເຂົາເຈົ້າ
ໂຄງສ້າງຂໍ້ມູນ Perl ພື້ນຖານແມ່ນຕົວແປ scalar, ເຊັ່ນ $x, ເຊິ່ງສາມາດຖືຕົວເລກ.
ຫຼືສະຕຣິງ, ລາຍຊື່ ຫຼືອາເຣຂອງເກັດ, ຕົວຢ່າງ @x, ແລະ arrays ທີ່ກ່ຽວຂ້ອງ/hashes ຂອງ scalar,
ຕົວຢ່າງ %x.
Perl v5 ແນະນຳໂຄງສ້າງຂໍ້ມູນ ແລະວັດຖຸຂອງ Perl. ຕົວແປແບບງ່າຍໆ $x ດຽວນີ້
ປະເພດຂໍ້ມູນທີ່ກໍານົດໂດຍຜູ້ໃຊ້ຫຼືວັດຖຸເຕັມທີ່ blown (ຕົວຈິງແລ້ວມັນເປັນການອ້າງອິງ (ສະຫຼາດ
"ຕົວຊີ້") ຕໍ່ກັບເລື່ອງນີ້ແຕ່ວ່າມັນບໍ່ກ່ຽວຂ້ອງກັບການນໍາໃຊ້ທົ່ວໄປຂອງ perlDL)
ແນວຄວາມຄິດພື້ນຖານທີ່ຢູ່ເບື້ອງຫລັງ perlDL ແມ່ນເພື່ອອະນຸຍາດໃຫ້ $x ຖື 1D spectrum ທັງຫມົດ, ຫຼື 2D.
ຮູບພາບ, cube ຂໍ້ມູນ 3D, ແລະອື່ນໆເຖິງຊຸດຂໍ້ມູນ N-ມິຕິລະດັບຂະຫນາດໃຫຍ່. ເຫຼົ່ານີ້ສາມາດເປັນ
manipulated ທັງຫມົດໃນເວລາດຽວກັນ, ເຊັ່ນ: "$a = $ b + 2" ດໍາເນີນການ vector ກ່ຽວກັບແຕ່ລະຄ່າໃນ
spectrum/image/etc.
ທ່ານອາດຈະຖາມວ່າ: "ເປັນຫຍັງຈຶ່ງບໍ່ພຽງແຕ່ເກັບຮັກສາ spectrum ເປັນບັນຊີລາຍຊື່ແບບ Perl @x ແບບງ່າຍດາຍກັບແຕ່ລະຄົນ
pixel ເປັນລາຍການລາຍການບໍ?” ສອງຄໍາຕອບທີ່ສໍາຄັນນີ້ແມ່ນ ຫນ່ວຍຄວາມຈໍາ ແລະ ຄວາມໄວ. ເນື່ອງຈາກວ່າພວກເຮົາ
ຮູ້ວ່າ spectrum ຂອງພວກເຮົາປະກອບດ້ວຍຕົວເລກທີ່ບໍລິສຸດທີ່ພວກເຮົາສາມາດເກັບຮັກສາພວກມັນຢ່າງແຫນ້ນຫນາຢູ່ໃນບລັອກດຽວ
ໜ່ວຍຄວາມຈຳທີ່ກົງກັບອາເຣຕົວເລກແບບ C. ນີ້ໃຊ້ເວລາເຖິງຄວາມຈໍາຫນ້ອຍກວ່າຫຼາຍ
ບັນຊີລາຍຊື່ Perl ທຽບເທົ່າ. ຫຼັງຈາກນັ້ນ, ມັນງ່າຍທີ່ຈະຜ່ານຕັນຂອງຄວາມຊົງຈໍານີ້ໄປສູ່ການເພີ່ມໄວ
ປົກກະຕິ, ຫຼືຟັງຊັນ C ອື່ນໆທີ່ຈັດການກັບ arrays. ດັ່ງນັ້ນ, perlDL ແມ່ນຫຼາຍ
ໄວ --- ຕົວຢ່າງຫນຶ່ງສາມາດຄູນຮູບ 2048 * 2048 ໃນເວລາດຽວກັບມັນ
ຈະໃຊ້ເວລາໃນ C ຫຼື FORTRAN (0.1 ວິນາທີໃນ SPARC ຂອງຂ້ອຍ). A ປະໂຫຍດເພີ່ມເຕີມຂອງການນີ້ແມ່ນວ່າສໍາລັບ
ການດໍາເນີນງານງ່າຍດາຍ (ເຊັ່ນ "$x += 2") ຫນຶ່ງສາມາດ manipulate array ທັງຫມົດໂດຍບໍ່ມີການເປັນຫ່ວງເປັນໄຍກ່ຽວກັບ.
ຂະຫນາດຂອງມັນ.
ຂ້ອຍພົບວ່າເມື່ອໃຊ້ perlDL ມັນເປັນປະໂຫຍດທີ່ສຸດທີ່ຈະຄິດເຖິງຕົວແປ Perl @x ມາດຕະຖານ
"ລາຍຊື່" ຂອງ "ສິ່ງ" ທົ່ວໄປແລະຕົວແປ PDL ເຊັ່ນ $x ເປັນ "ອາເຣ" ເຊິ່ງສາມາດບັນຈຸໄດ້.
ໃນລາຍການຫຼື hashes. ຂ້ອນຂ້າງເລື້ອຍໆໃນສະຄິບ perlDL ຂອງຂ້ອຍຂ້ອຍມີ @x ມີບັນຊີລາຍຊື່ຂອງ spectra,
ຫຼືບັນຊີລາຍຊື່ຂອງຮູບພາບ (ຫຼືແມ້ກະທັ້ງປະສົມ!). ຫຼືບາງທີອາດມີ hash (ເຊັ່ນ %x) ຂອງ
ຮູບພາບ ... ຈໍາກັດພຽງແຕ່ແມ່ນຄວາມຊົງຈໍາ!
ຕົວແປ perlDL ສະຫນັບສະຫນູນຂອບເຂດຂອງປະເພດຂໍ້ມູນ - arrays ສາມາດເປັນ bytes, integers ສັ້ນ
(ເຊັນ ຫຼື ບໍ່ເຊັນ), ຈໍານວນເຕັມຍາວ, ເລື່ອນ ຫຼື ເລື່ອນຄວາມແມ່ນຍໍາສອງເທົ່າ.
ການນໍາໃຊ້
PerlDL ຖືກໂຫລດເຂົ້າໄປໃນສະຄິບ Perl ຂອງທ່ານໂດຍໃຊ້ຄໍາສັ່ງນີ້:
ໃຊ້ PDL; # ໃນ Perl scripts: ໃຊ້ໂມດູນ perlDL ມາດຕະຖານ
ຍັງມີຫຼາຍໂມດູນການຂະຫຍາຍ, ເຊັ່ນ: PDL::Graphics::TriD. ສ່ວນໃຫຍ່ເຫຼົ່ານີ້ (ແຕ່
ບໍ່ແມ່ນທັງໝົດເພາະບາງຄັ້ງມັນບໍ່ເໝາະສົມ) ປະຕິບັດຕາມສົນທິສັນຍາມາດຕະຖານ. ຖ້າຫາກວ່າທ່ານເວົ້າວ່າ:
ໃຊ້ PDL::Graphics::TriD;
ທ່ານນໍາເຂົ້າທຸກສິ່ງທຸກຢ່າງໃນບັນຊີລາຍຊື່ມາດຕະຖານຈາກໂມດູນ. ບາງຄັ້ງທ່ານອາດຈະຕ້ອງການ
ນໍາເຂົ້າບໍ່ມີຫຍັງ (ເຊັ່ນ: ຖ້າທ່ານຕ້ອງການໃຊ້ syntax OO ຕະຫຼອດເວລາແລະປະຫຍັດພາສີນໍາເຂົ້າ).
ສໍາລັບການເຫຼົ່ານີ້, ທ່ານເວົ້າວ່າ:
ໃຊ້ PDL::Graphics::TriD qw();
ແລະວົງຢືມ "qw()" ຫວ່າງເປົ່າຖືກຮັບຮູ້ວ່າຫມາຍຄວາມວ່າ 'ບໍ່ມີຫຍັງ'. ນອກນັ້ນທ່ານຍັງສາມາດກໍານົດ a
ບັນຊີລາຍຊື່ຂອງຫນ້າທີ່ນໍາເຂົ້າໃນວິທີການ Perl ປົກກະຕິ.
ນອກຈາກນີ້ຍັງມີແກະແບບໂຕ້ຕອບ, "perldl" ຫຼື "pdl2", ເບິ່ງ perdl ຫຼື pdl2 ສໍາລັບລາຍລະອຽດ.
To ສ້າງ a ໃຫມ່ PDL ຕົວແປ
ນີ້ແມ່ນບາງວິທີໃນການສ້າງຕົວແປ PDL:
$a = pdl [1..10]; # 1D array
$a = pdl(1,2,3,4); # ດີໂຕ
$a = pdl '[1 2 3 4]'; # ດີໂຕ
$b = pdl [[1,2,3],[4,5,6]]; # 2D 3x2 array
$b = pdl '[1 2 3; 4 5 6]'; # ດີໂຕ
$b = pdl q[1,2,3; 4,5,6]; # ດີໂຕ
$b = pdl <
[1 2 3]
[4 5 6]
NEWPDL
$c = pdl q[1 -2]; # piddle 2 ອົງປະກອບທີ່ມີ 1 ແລະ -2
$c = pdl q[1 − 2]; # piddle 2 ອົງປະກອບທີ່ມີ 1 ແລະ -2
$b = pdl 42 # 0-dimensional scalar
$c = pdl $a; #ເຮັດສຳເນົາໃໝ່
$d = byte [1..10]; # ເບິ່ງ "ການແປງປະເພດ"
$e = zeroes(3,2,4); # 3x2x4 array ເຕັມສູນ
$c = rfits $file; # ອ່ານໄຟລ໌ FITS
@x = ( pdl(42), zeroes(3,2,4), rfits($file) ); # ແມ່ນບັນຊີລາຍຊື່ຂອງຕົວແປ PDL!
ໄດ້ pdl() function ແມ່ນໃຊ້ເພື່ອເລີ່ມຕົ້ນຕົວແປ PDL ຈາກ scalar, list, list
ການອ້າງອີງ, ຕົວແປ PDL ອື່ນ, ຫຼືສະຕຣິງທີ່ມີຮູບແບບທີ່ຖືກຕ້ອງ.
ນອກຈາກນັ້ນ, ຟັງຊັນ PDL ທັງຫມົດຈະປ່ຽນສະເກັດເງິນ Perl ປົກກະຕິໄປສູ່ຕົວແປ PDL ໂດຍອັດຕະໂນມັດ
ກ່ຽວກັບການບິນ.
(ເບິ່ງ "ການປ່ຽນແປງປະເພດ" ແລະ "ການປ້ອນຂໍ້ມູນ / ຜົນໄດ້ຮັບ" ພາກສ່ວນຂ້າງລຸ່ມນີ້)
ເລກຄະນິດສາດ (ແລະ ປຸ້ຍ ການສະແດງອອກ)
$a = $b + 2; $a++; $a = $b / $c; # ອື່ນໆ.
$c=sqrt($a); $d = log10($b+100); # ອື່ນໆ
$e = $a>42; # ເງື່ອນໄຂ vector
$e = 42*($a>42) + $a*($a<=42); #ໝວກ
$b = $a->log10 ເວັ້ນເສຍແຕ່ວ່າມີ ($a <= 0); # ຫຼີກເວັ້ນຄວາມຜິດພາດຈຸດລອຍ
$a = $a / ( max($a) - min($a) );
$f = where($a, $a > 10); # ບ່ອນທີ່ສົ່ງຄືນ piddle ຂອງອົງປະກອບສໍາລັບ
#ເຊິ່ງເງື່ອນໄຂເປັນຄວາມຈິງ
ພິມ $a; # $a ໃນ string context ພິມມັນໃນຮູບແບບ N-dimensional
(ແລະຕົວປະຕິບັດການ Perl ອື່ນໆ)
ເມື່ອໃຊ້ piddles ໃນການສະແດງອອກທີ່ມີເງື່ອນໄຂ (ເຊັ່ນ "ຖ້າ", "ເວັ້ນເສຍແຕ່" ແລະ "ໃນຂະນະທີ່" ກໍ່ສ້າງ)
ອະນຸຍາດໃຫ້ມີພຽງ piddles ທີ່ມີອົງປະກອບອັນດຽວເທົ່ານັ້ນ, ຕົວຢ່າງ
$a = pdl (1,0,0,1);
ພິມ "ຖືກຕັ້ງ" ຖ້າ $a->ດັດຊະນີ(2)
ໃຫ້ສັງເກດວ່າຕົວປະຕິບັດການ boolean ກັບຄືນມາໃນ piddles ຫຼາຍອົງປະກອບທົ່ວໄປ. ເພາະສະນັ້ນ, ໄດ້
ຕໍ່ໄປນີ້ຈະເຮັດໃຫ້ເກີດຄວາມຜິດພາດຂຶ້ນ
ພິມ "ແມ່ນແລ້ວ" ຖ້າ $a > 3;
ເນື່ອງຈາກ "$a > 3" ເປັນ piddle ທີ່ມີ 4 ອົງປະກອບ. ແທນທີ່ຈະໃຊ້ທັງໝົດ ຫຼືອັນໃດອັນໜຶ່ງເພື່ອທົດສອບວ່າທັງໝົດ ຫຼືອັນໃດອັນໜຶ່ງ
ອົງປະກອບສໍາເລັດເງື່ອນໄຂ:
ພິມ "ບາງອັນແມ່ນ > 3" ຖ້າມີ $a>3;
ພິມ "ບໍ່ສາມາດເອົາ logarithm" ເວັ້ນເສຍແຕ່ທັງຫມົດ $a>0;
ຍັງມີຫຼາຍຫນ້າທີ່ກໍານົດໄວ້ລ່ວງຫນ້າ, ເຊິ່ງໄດ້ອະທິບາຍຢູ່ໃນຫນ້າຜູ້ຊາຍອື່ນໆ. ກວດສອບ
PDL::ດັດຊະນີ.
ມາຕຣິກເບື້ອງ ຫນ້າທີ່
'x' ຖືກ hijacked ເປັນຕົວປະຕິບັດການຄູນ matrix. ຕົວຢ່າງ "$c = $ax $b";
perlDL ແມ່ນແຖວຕົ້ນຕໍບໍ່ແມ່ນຄໍລໍາທີ່ສໍາຄັນດັ່ງນັ້ນນີ້ແມ່ນ "c(i,j) = sum_k a(k,j) b(i,k)" -
ແຕ່ເມື່ອ matrices ຖືກພິມອອກຜົນໄດ້ຮັບຈະເບິ່ງຖືກຕ້ອງ. ພຽງແຕ່ຈື່ໄວ້ວ່າຕົວຊີ້ວັດແມ່ນ
ປີ້ນກັບກັນ. ຕົວຢ່າງ:
$a = [ $b = [
[ 1 2 3 0 ] [1 1]
[ 1 -1 2 7 ] [0 2]
[ 1 0 0 1 ] [0 2]
] [1 1]
]
ໃຫ້ $c = [
[ 1 11 ]
[ 8 10 ]
[ 2 2 ]
]
ຫມາຍເຫດ: transpose() ເຮັດສິ່ງທີ່ມັນເວົ້າແລະເປັນວິທີທີ່ສະດວກທີ່ຈະປ່ຽນ vectors ແຖວເປັນ
ຖັນ vectors.
ວິທີການ to ຂຽນ a ງ່າຍດາຍ ຫນ້າທີ່
ຜະລິດຕະພັນຍ່ອຍ {
ຂອງຂ້ອຍ ($a,$b) = @_;
ຜົນບວກ($a*$b);
}
1;
ຖ້າໃສ່ໃນໄຟລ໌ dotproduct.pdl ຈະຖືກໂຫລດອັດຕະໂນມັດຖ້າທ່ານໃຊ້ PDL::AutoLoader (ເບິ່ງ.
ດ້ານລຸ່ມ).
ແນ່ນອນ, ຟັງຊັນນີ້ມີຢູ່ແລ້ວເປັນຫນ້າທີ່ພາຍໃນ, ເບິ່ງ PDL::Primitive.
ປະເພດ ການປ່ຽນແປງ
ຄ່າເລີ່ມຕົ້ນສໍາລັບ pdl() ແມ່ນສອງເທົ່າ. ການປ່ຽນແປງແມ່ນ:
$a = float($b);
$c = long($d); # "ຍາວ" ໂດຍທົ່ວໄປແມ່ນ 4 byte int
$d = byte($a);
ນອກຈາກນີ້ຍັງ ສອງ(), ສັ້ນ(), ຫຍໍ້ໆ(), ດັດຊະນີ().
ຫມາຍເຫດ: indx() routine ແມ່ນປະເພດຈໍານວນເຕັມພິເສດທີ່
ແມ່ນຂະຫນາດທີ່ຖືກຕ້ອງສໍາລັບຄ່າດັດຊະນີ PDL (ຂະຫນາດຂະຫນາດ,
index, ຫຼື offest) ເຊິ່ງສາມາດເປັນ 32bit (ຍາວ) ຫຼື
64bit (longlong) ປະລິມານຂຶ້ນກັບວ່າ perl
ຖືກສ້າງຂຶ້ນດ້ວຍການສະຫນັບສະຫນູນ 32bit ຫຼື 64bit.
ປົກກະຕິເຫຼົ່ານີ້ຍັງປ່ຽນລາຍຊື່ Perl ໂດຍອັດຕະໂນມັດເພື່ອອະນຸຍາດໃຫ້ໃຊ້ shorthand ສະດວກ:
$a = byte [[1..10],[1..10]]; # ສ້າງ array 2D byte
$a = float [1..1000]; # ສ້າງ 1D float array
ແລະອື່ນໆ
ການພິມ
ຂະຫຍາຍ array ໂດຍອັດຕະໂນມັດໃນຮູບແບບ N-dimensional:
ພິມ $a;
$b = "ຄໍາຕອບແມ່ນ = $a";
Sections
PDL ມີ slicing multidimensional ມີອໍານາດຫຼາຍແລະປະຕິບັດການພາກສ່ວນ; ເບິ່ງ
PDL::ແຜ່ນນ້ອຍໆ(3) ຫນ້າຜູ້ຊາຍສໍາລັບລາຍລະອຽດ; ພວກເຮົາຈະອະທິບາຍສິ່ງທີ່ສໍາຄັນທີ່ສຸດຢູ່ທີ່ນີ້.
PDL ສະແດງໃຫ້ເຫັນມໍລະດົກ Perl/C ຂອງມັນຢູ່ໃນອາເຣນັ້ນແມ່ນສູນຊົດເຊີຍ. ດັ່ງນັ້ນຈຶ່ງມີຮູບພາບ 100x100
ດັດຊະນີ "0..99,0..99". (ສົນທິສັນຍາແມ່ນວ່າ ສູນ ຂອງ pixels (0,0) ແມ່ນຢູ່ໃນຈຸດປະສານງານ
(0.0,0.0). ຟັງຊັນກາຟິກ PDL ທັງໝົດສອດຄ່ອງກັບຄຳນິຍາມນີ້ ແລະເຊື່ອງໜ່ວຍນັ້ນອອກໄປ
ການຊົດເຊີຍຂອງ, ສໍາລັບການຍົກຕົວຢ່າງ, ຫ້ອງສະຫມຸດ PGPLOT FORTRAN.
ປະຕິບັດຕາມປະສານງານສົນທິສັນຍາປົກກະຕິ (0,0) ສະແດງຢູ່ທາງລຸ່ມຊ້າຍໃນເວລາທີ່
ການສະແດງຮູບພາບ. ມັນປາກົດຢູ່ເບື້ອງຊ້າຍເທິງເມື່ອໃຊ້ ""ພິມ $a" ແລະອື່ນໆ.
ພາກສ່ວນທີ່ງ່າຍດາຍໃຊ້ການຂະຫຍາຍ syntax ກັບ Perl, PDL::NiceSlice, ທີ່ຊ່ວຍໃຫ້ທ່ານສາມາດ
ລະບຸໄລຍະຍ່ອຍຜ່ານຕົວແກ້ໄຂ null-method ເປັນ PDL:
$b = $a->($x1:$x2,$y1:$y2,($z1)); # ເອົາສ່ວນຍ່ອຍ
ທີ່ນີ້, $a ແມ່ນຕົວແປ 3 ມິຕິລະດັບ, ແລະ $b ໄດ້ຮັບ cutout ແຜນທີ່ຖືກກໍານົດໂດຍ
ຈຳກັດ $x1, $x2, $y1, $y2, ຢູ່ສະຖານທີ່ $z1. ວົງເລັບປະມານ $z1 ເຮັດໃຫ້ເກີດ
ດັດຊະນີເລັກນ້ອຍທີ່ຈະຖືກຍົກເວັ້ນ - ຖ້າບໍ່ດັ່ງນັ້ນ $b ຈະເປັນສາມມິຕິລະດັບກັບສາມ
ຂະຫນາດຂອງຄໍາສັ່ງ 1.
ທ່ານສາມາດວາງ PDL ທັງສອງຂ້າງຂອງຕົວປະຕິບັດການມອບຫມາຍອົງປະກອບທີ່ສະຫລາດ ".=", ເຊັ່ນ
ດັ່ງນັ້ນ:
# ຕັ້ງສ່ວນຂອງ $bigimage ເປັນຄ່າຈາກ $smallimage
$bigimage->($xa:$xb,$ya:$yb).= $smallimage;
ບາງສ່ວນອື່ນໆ:
$c = nelem($a); # ຈຳນວນ pixels
$val = at($object, $x,$y,$z...) # ຄ່າ pixels ລວງຢູ່ຕຳແໜ່ງ, ເປັນ Perl scalar
$val = $object->at($x,$y,$z...) # ທຽບເທົ່າ (ວິທີ syntax OK)
$b = xvals($a); # ຕື່ມຂໍ້ມູນໃສ່ອາເຣດ້ວຍຄ່າ X-coord (ຍັງ yvals(), zvals(),
# axisvals($x,$axis) ແລະ rvals() ສໍາລັບໄລຍະຫ່າງ radial
# ຈາກສູນກາງ).
Input / Output
ໂມດູນ "PDL::IO" ປະຕິບັດຫນ້າທີ່ຮູບແບບ IO ທີ່ເປັນປະໂຫຍດຫຼາຍອັນ. ມັນຈະຫຼາຍເກີນໄປ
ເພື່ອໃຫ້ຕົວຢ່າງຂອງແຕ່ລະຄົນ, ແຕ່ເຈົ້າສາມາດຊອກຫາພາບລວມທີ່ດີໄດ້ທີ່ PDL::IO. ນີ້ແມ່ນຕົວຢ່າງຂອງ
ບາງຮູບແບບ IO ທີ່ຮອງຮັບໃນ PDL.
PDL::IO::ອື່ນໆ
Ascii, FITS ແລະ FIGARO/NDF IO routines.
PDL::IO::FastRaw
ການນໍາໃຊ້ປະເພດຂໍ້ມູນວັດຖຸດິບຂອງເຄື່ອງຂອງທ່ານ, ເປັນ IO ທີ່ບໍ່ສາມາດນໍາໃຊ້ແຕ່ໄວຕາບອດໄດ້
ຮູບແບບ. ນອກຈາກນີ້ຍັງສະຫນັບສະຫນູນການສ້າງແຜນທີ່ຫນ່ວຍຄວາມຈໍາເພື່ອເກັບຮັກສາຄວາມຊົງຈໍາເຊັ່ນດຽວກັນກັບໄດ້ຮັບຄວາມໄວຫຼາຍຂຶ້ນ.
PDL::IO::FlexRaw
ຮູບແບບຂໍ້ມູນດິບທົ່ວໄປ. ເຊັ່ນດຽວກັນກັບ FastRaw, ພຽງແຕ່ດີກວ່າ.
PDL::IO::Browser
ຕົວທ່ອງເວັບ Curses ສໍາລັບ arrays.
PDL::IO::Pnm
Portaple bitmap ແລະສະຫນັບສະຫນູນ pixmap.
PDL::IO::ຮູບ
ການນໍາໃຊ້ໂມດູນທີ່ຜ່ານມາແລະ netpbm, ເຮັດໃຫ້ມັນເປັນໄປໄດ້ທີ່ຈະຂຽນ GIF, jpeg ໄດ້ຢ່າງງ່າຍດາຍ
ແລະອັນໃດກໍ່ຕາມທີ່ມີຄໍາສັ່ງງ່າຍໆ.
ຮູບພາບ
ປັດຊະຍາທີ່ຢູ່ເບື້ອງຫຼັງ perlDL ແມ່ນເພື່ອເຮັດໃຫ້ມັນເຮັດວຽກກັບຄວາມຫລາກຫລາຍຂອງກາຟິກທີ່ມີຢູ່
ຫ້ອງສະຫມຸດນັບຕັ້ງແຕ່ບໍ່ມີຊຸດດຽວຈະຕອບສະຫນອງຄວາມຕ້ອງການທັງຫມົດແລະປະຊາຊົນທັງຫມົດແລະນີ້ອະນຸຍາດໃຫ້
ຫນຶ່ງທີ່ຈະເຮັດວຽກກັບຊຸດຫນຶ່ງຮູ້ແລະມັກ. ແນ່ນອນຈະມີບາງອັນ
ການຊ້ອນກັນໃນການເຮັດວຽກແລະບາງການຂາດຄວາມສອດຄ່ອງແລະຄວາມເປັນເອກະພາບ. ຢ່າງໃດກໍຕາມ, ນີ້ອະນຸຍາດໃຫ້
PDL ເພື່ອຮັກສາພາກສະຫນາມທີ່ມີການພັດທະນາຢ່າງໄວວາ - ໂມດູນ PDL ຫຼ້າສຸດສະຫນອງການໂຕ້ຕອບ
ກັບ OpenGL ແລະກຣາບຟິກ VRML!
PDL::ກາຟິກ::PGPLOT
PGPLOT ສະຫນອງຫ້ອງສະຫມຸດແບບງ່າຍດາຍສໍາລັບຮູບພາບເສັ້ນແລະການສະແດງຮູບພາບ.
ມີການໂຕ້ຕອບທີ່ງ່າຍຕໍ່ເລື່ອງນີ້ຢູ່ໃນໂມດູນພາຍໃນ PDL::Graphics::PGPLOT, ເຊິ່ງ
ໂທຫາປົກກະຕິໃນໂມດູນລະດັບສູງສຸດຂອງ PGPLOT ທີ່ແຍກຕ່າງຫາກ.
PDL::Graphics::PLplot
PLplot ສະຫນອງຫ້ອງສະຫມຸດງ່າຍດາຍສໍາລັບການສ້າງຮູບພາບທີ່ມີໄດເວີຜົນຜະລິດຫຼາຍ,
ລວມທັງຄົນຂັບໂດຍກົງຫາ piddle.
ໂມດູນນີ້ສະຫນອງການທໍາງານທັງສອງລະດັບສູງແລະລະດັບຕ່ໍາທີ່ສ້າງຂຶ້ນໃນ PLplot. ໄດ້
ຄໍາສັ່ງລະດັບຕ່ໍາແມ່ນການຜູກມັດໂດຍກົງກັບການໂຕ້ຕອບ C ຂອງ PLplot. ອ່ານຕື່ມ
ທີ່ PDL::Graphics::PLplot.
PDL::ກາຟິກ::IIS
ນັກດາລາສາດຫຼາຍຄົນມັກໃຊ້ SAOimage ແລະ Ximtool (ຫຼືມີ derivations / clones). ເຫຼົ່ານີ້
ແມ່ນ widget ຟຣີທີ່ເປັນປະໂຫຍດສໍາລັບການກວດກາແລະການເບິ່ງເຫັນຮູບພາບ. (ພວກເຂົ້າບໍ່ແມ່ນ
ສະຫນອງໃຫ້ກັບ perlDL ແຕ່ສາມາດໄດ້ຮັບໄດ້ຢ່າງງ່າຍດາຍຈາກເວັບໄຊທ໌ທາງການຂອງເຂົາເຈົ້າອອກຈາກ
ສຸດທິ)
PDL::ກາຟິກ::ຊຸດ IIS ສະໜອງໃຫ້ອັນໜຶ່ງເພື່ອສະແດງຮູບພາບໃນສິ່ງເຫຼົ່ານີ້ ("IIS"
ແມ່ນຊື່ຂອງວັດຖຸບູຮານຂອງຮາດແວສະແດງຮູບພາບທີ່ມີໂປໂຕຄອນເຄື່ອງມືເຫຼົ່ານີ້
ສອດຄ່ອງກັບ.)
PDL::Graphics::TriD
ເບິ່ງ PDL::ກຣາບຟິກ::TriD, ນີ້ແມ່ນຄໍເລັກຊັນຂອງ 3D routines ສໍາລັບ OpenGL ແລະ (ໄວໆນີ້)
VRML ແລະຮູບແບບ 3D ອື່ນໆທີ່ອະນຸຍາດໃຫ້ 3D ຈຸດ, ເສັ້ນ, ແລະຮູບແບບຫນ້າດິນຈາກ PDL.
ການໂຫຼດອັດຕະໂນມັດ
ເບິ່ງ PDL::AutoLoader. ນີ້ອະນຸຍາດໃຫ້ຫນຶ່ງສາມາດ autoload ຫນ້າທີ່ຕາມຄວາມຕ້ອງການ, ໃນບາງທີອາດມີ
ຄຸ້ນເຄີຍກັບຜູ້ໃຊ້ MatLab.
ຫນຶ່ງຍັງສາມາດຂຽນການຂະຫຍາຍ PDL ເປັນໂມດູນ Perl ປົກກະຕິ.
PDL shells
Perl script "pdl2" (ຫຼື "perldl") ສະຫນອງການໂຕ້ຕອບເສັ້ນຄໍາສັ່ງງ່າຍດາຍກັບ PDL. ຖ້າ
ໂມດູນ Readlines/ReadKey ຫຼ້າສຸດໄດ້ຖືກຕິດຕັ້ງ "pdl2" ກວດພົບນີ້ແລະເປີດໃຊ້
ການເອີ້ນຄືນ ແລະແກ້ໄຂເສັ້ນຄຳສັ່ງ. ເບິ່ງຫນ້າຜູ້ຊາຍສໍາລັບລາຍລະອຽດ.
ຕົວຢ່າງ:
% perdl
perlDL shell v1.354
PDL ມາພ້ອມກັບການຮັບປະກັນຢ່າງແທ້ຈິງ. ສໍາລັບລາຍລະອຽດ, ເບິ່ງໄຟລ໌
'ການສຳເນົາ' ໃນການແຈກຢາຍ PDL. ນີ້ແມ່ນຊອບແວຟຣີແລະທ່ານ
ຍິນດີຕ້ອນຮັບການແຈກຢາຍມັນພາຍໃຕ້ເງື່ອນໄຂສະເພາະໃດຫນຶ່ງ, ເບິ່ງ
ໄຟລ໌ດຽວກັນສໍາລັບລາຍລະອຽດ.
ເປີດໃຊ້ ReadLines, NiceSlice, MultiLines ແລ້ວ
ກຳລັງອ່ານ PDL/default.perldlrc...
ພົບຖານຂໍ້ມູນ docs /home/pdl/dev/lib/perl5/site_perl/PDL/pdldoc.db
ພິມ 'help' ສໍາລັບການຊ່ວຍເຫຼືອອອນໄລນ໌
ພິມ 'demo' ສໍາລັບການສາທິດອອນໄລນ໌
ໂຫລດ PDL v2.4.9_003 (ຮອງຮັບຄ່າທີ່ບໍ່ດີ)
pdl> $x = rfits 'm51.fits'
ກຳລັງອ່ານຂໍ້ມູນ IMAGE...
BITPIX = 32 ຂະໜາດ = 147456 ພິກເຊລ
ກຳລັງອ່ານ 589824 bytes
BSCALE = && BZERO =
pdl> ໃຊ້ PDL::Graphics::PGPLOT;
pdl> ຮູບພາບ $x
ສະແດງຮູບພາບ 384 x 384 ຈາກ 40 ຫາ 761, ໃຊ້ 84 ສີ (16-99)...
ນອກນັ້ນທ່ານຍັງສາມາດດໍາເນີນການໄດ້ຈາກ Perl debugger ("perl -MPDL -d -e 1") ຖ້າທ່ານຕ້ອງການ.
ຄຸນນະສົມບັດຂອງແກະອື່ນໆ:
p ແກະ aliases "p" ເປັນຮູບແບບສັ້ນສະດວກຂອງ "ພິມ", eg
pdl > p ones 5,3
[
[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]
]
ການລິເລີ່ມ
ໄຟລ໌ "~/.perldlrc" ແລະ "local.perldlrc" (ໃນໄດເລກະທໍລີປະຈຸບັນ) ແມ່ນມາຈາກ if
ພົບ. ນີ້ອະນຸຍາດໃຫ້ຜູ້ໃຊ້ມີລະຫັດ PDL ທົ່ວໂລກແລະທ້ອງຖິ່ນສໍາລັບການເລີ່ມຕົ້ນ.
ຊ່ວຍເຫຼືອ
ພິມ 'ຊ່ວຍ'! ຫນຶ່ງສາມາດຄົ້ນຫາເອກະສານ PDL, ແລະຊອກຫາເອກະສານໃດໆ
function
Escape
ແຖວໃດກໍໄດ້ທີ່ເລີ່ມຕົ້ນດ້ວຍຕົວອັກສອນ "#" ແມ່ນຖືວ່າເປັນການຫລົບໜີຈາກແກະ. ລັກສະນະນີ້
ສາມາດຕັ້ງຄ່າໄດ້ໂດຍການຕັ້ງຄ່າຕົວແປ Perl $PERLDL_ESCAPE. ນີ້ສາມາດ, ສໍາລັບການຍົກຕົວຢ່າງ,
ຖືກຕັ້ງຢູ່ໃນ "~/.perldlrc".
overload ຜູ້ປະກອບການ
ຕົວປະຕິບັດການ Perl ແລະຫນ້າທີ່ສ້າງຕໍ່ໄປນີ້ໄດ້ຖືກໂຫຼດເກີນເພື່ອເຮັດວຽກຢູ່ໃນ PDL
ຕົວແປ:
+-* / > < >= <= << >> & | ^ == != <=> ** % ! ~
sin log abs atan2 sqrt cos exp
[ທຸກຫນ້າທີ່ unary (ບາບແລະອື່ນໆ) ອາດຈະຖືກນໍາໃຊ້ກັບ ໃນສະຖານທີ່() - ເບິ່ງ "ຄວາມຊົງຈໍາ" ຂ້າງລຸ່ມນີ້.]
Object-Orientation ແລະ perlDL
ການດໍາເນີນງານ PDL ແມ່ນມີຢູ່ໃນຫນ້າທີ່ແລະວິທີການ. ດັ່ງນັ້ນ, ຫນຶ່ງສາມາດໄດ້ຮັບປະເພດໃຫມ່ຂອງ
object, ເພື່ອເປັນຕົວແທນຂອງຊັ້ນຂໍ້ມູນແບບກຳນົດເອງ.
ໂດຍການນໍາໃຊ້ overloading ຫນຶ່ງສາມາດເຮັດໃຫ້ຕົວປະຕິບັດການຄະນິດສາດເຮັດອັນໃດກໍໄດ້ທີ່ທ່ານກະລຸນາ, ແລະ PDL
ມີບາງ tricks ໃນຕົວທີ່ອະນຸຍາດໃຫ້ຫນ້າທີ່ PDL ທີ່ມີຢູ່ແລ້ວເຮັດວຽກບໍ່ປ່ຽນແປງ, ເຖິງແມ່ນວ່າ
ການເປັນຕົວແທນຂອງຂໍ້ມູນເບື້ອງຕົ້ນມີການປ່ຽນແປງຢ່າງຫຼວງຫຼາຍ! ເບິ່ງ PDL::Objects
ຫນ່ວຍຄວາມຈໍາ ການນໍາໃຊ້ ແລະ ເອກະສານ
ການເສີຍໆກັບອາເຣຂໍ້ມູນຂະໜາດໃຫຍ່ແທ້ໆອາດຕ້ອງການການດູແລບາງຢ່າງ. perlDL ສະຫນອງຈໍານວນຫຼາຍ
ສິ່ງອໍານວຍຄວາມສະດວກເພື່ອໃຫ້ທ່ານປະຕິບັດການດໍາເນີນງານໃນ arrays ໃຫຍ່ໂດຍບໍ່ມີການສ້າງສໍາເນົາເພີ່ມເຕີມ
ເຖິງແມ່ນວ່ານີ້ຕ້ອງການຄວາມຄິດແລະການດູແລເລັກນ້ອຍຫຼາຍຈາກຜູ້ຂຽນໂປລແກລມ.
ຫມາຍເຫດ: ໃນບາງລະບົບຫຼາຍທີ່ສຸດມັນເປັນການດີກວ່າການຕັ້ງຄ່າ Perl (ໃນລະຫວ່າງການສ້າງທາງເລືອກ) ກັບ
ໃຊ້ລະບົບ "malloc()" ແທນທີ່ຈະເປັນຕົວສ້າງຂອງ Perl. ນີ້ແມ່ນຍ້ອນວ່າ Perl's
ຫນຶ່ງແມ່ນ optimized ສໍາລັບຄວາມໄວແທນທີ່ຈະບໍລິໂພກຂອງຫນ່ວຍຄວາມຈໍາ virtual - ນີ້ສາມາດສົ່ງຜົນໃຫ້
ປັດໄຈຂອງການປັບປຸງສອງປະລິມານການເກັບຮັກສາຄວາມຊົງຈໍາທີ່ທ່ານສາມາດນໍາໃຊ້ໄດ້. The Perl malloc
ໃນ 5.004 ແລະຕໍ່ມາມີຈໍານວນຕົວເລືອກເວລາລວບລວມທີ່ທ່ານສາມາດນໍາໃຊ້ເພື່ອປບັ
ພຶດຕິ ກຳ.
ເລກຄະນິດສາດແບບງ່າຍດາຍ
ຖ້າ $a ເປັນຮູບພາບໃຫຍ່ (ເຊັ່ນ: ຄອບຄອງ 10MB) ຫຼັງຈາກນັ້ນຄໍາສັ່ງ
$a = $a + 1;
ກິນຄວາມຈຳອີກ 10MB. ນີ້ແມ່ນຍ້ອນວ່າການສະແດງອອກ "$a+1" ສ້າງ a
ສໍາເນົາຊົ່ວຄາວຂອງ $a ເພື່ອຖືຜົນໄດ້ຮັບ, ຫຼັງຈາກນັ້ນ $a ໄດ້ຖືກມອບຫມາຍການອ້າງອີງເຖິງສິ່ງນັ້ນ.
ຫຼັງຈາກນີ້, $a ຕົ້ນສະບັບຖືກທໍາລາຍດັ່ງນັ້ນບໍ່ມີ ຖາວອນ ສິ່ງເສດເຫຼືອຄວາມຊົງຈໍາ. ແຕ່ສຸດ
ເຄື່ອງຈັກຂະຫນາດນ້ອຍ, ການຂະຫຍາຍຕົວໃນຄວາມຊົງຈໍາ footprint ສາມາດພິຈາລະນາ. ມັນແມ່ນ
ແນ່ນອນເຮັດແບບນີ້ເພື່ອໃຫ້ "$c=$a+1" ເຮັດວຽກຕາມທີ່ຄາດໄວ້.
ນອກຈາກນີ້ຖ້າຄົນຫນຶ່ງເວົ້າວ່າ:
$b = $a; # $b ແລະ $a ໃນປັດຈຸບັນຊີ້ໃຫ້ເຫັນຂໍ້ມູນດຽວກັນ
$a = $a + 1;
ຫຼັງຈາກນັ້ນ, $b ແລະ $a ຈົບລົງແມ່ນແຕກຕ່າງກັນ, ດັ່ງທີ່ຄົນເຮົາຄາດຫວັງໄວ້ຢ່າງໄຮ້ເຫດຜົນ, ເພາະວ່າການອ້າງອີງໃໝ່
ຖືກສ້າງຂື້ນແລະ $a ຖືກມອບຫມາຍໃຫ້ມັນ.
ຢ່າງໃດກໍຕາມ, ຖ້າ $a ເປັນຫນ່ວຍຄວາມຈໍາຂະຫນາດໃຫຍ່ (ເຊັ່ນ: ປະລິມານ 3D) ການສ້າງສໍາເນົາຂອງມັນອາດຈະບໍ່
ເປັນສິ່ງທີ່ດີ. ຄົນເຮົາສາມາດຫຼີກລ່ຽງຄວາມຊົງຈໍານີ້ຢູ່ໃນຕົວຢ່າງຂ້າງເທິງໂດຍການເວົ້າວ່າ:
$a++;
ການດໍາເນີນງານ "++,+=,--,-=", ແລະອື່ນໆ. ທັງຫມົດເອີ້ນວ່າ "ໃນສະຖານທີ່" ສະບັບພິເສດຂອງ.
ສູດຍ່ອຍເລກເລກ. ນີ້ຫມາຍຄວາມວ່າບໍ່ຈໍາເປັນຕ້ອງມີຫນ່ວຍຄວາມຈໍາຫຼາຍ - ຂໍ້ເສຍຂອງມັນແມ່ນ
ວ່າ ຖ້າ "$b=$a" ແລ້ວ $b ກໍ່ຖືກເພີ່ມຂຶ້ນ. ເພື່ອບັງຄັບສຳເນົາຢ່າງຈະແຈ້ງ:
$b = pdl $a; # ສຳເນົາຕົວຈິງ
ຫຼື, ໃນທາງກົງກັນຂ້າມ, ບາງທີຮູບແບບທີ່ດີກວ່າ:
$b = $a->ສຳເນົາ;
ຫນ້າທີ່
ຫນ້າທີ່ສ່ວນໃຫຍ່, ເຊັ່ນ: "log()", ສົ່ງຜົນໄດ້ຮັບທີ່ເປັນການຫັນປ່ຽນຂອງພວກມັນ
ການໂຕ້ຖຽງ. ນີ້ເຮັດໃຫ້ການປະຕິບັດການຂຽນໂປຼແກຼມທີ່ດີ. ຢ່າງໃດກໍຕາມ, ການດໍາເນີນງານຫຼາຍສາມາດ
ເຮັດ "ໃນສະຖານທີ່" ແລະນີ້ອາດຈະຕ້ອງການໃນເວລາທີ່ arrays ຂະຫນາດໃຫຍ່ຢູ່ໃນການນໍາໃຊ້ແລະຫນ່ວຍຄວາມຈໍາຢູ່ທີ່
ຄ່ານິຍົມ. ສໍາລັບສະຖານະການເຫຼົ່ານີ້ຜູ້ປະກອບການ ໃນສະຖານທີ່() ແມ່ນສະຫນອງໃຫ້ເຊິ່ງປ້ອງກັນ
ສໍາເນົາເພີ່ມເຕີມແລະອະນຸຍາດໃຫ້ມີການດັດແກ້ການໂຕ້ຖຽງ. ຕົວຢ່າງ:
$x = log($array); # $array ບໍ່ໄດ້ຮັບຜົນກະທົບ
log(inplace($bigarray) ); # $bigarray ປ່ຽນຢູ່ໃນສະຖານະການ
ຄຳ ເຕືອນ:
1. ຄໍາເຕືອນປົກກະຕິກ່ຽວກັບການອ້າງອິງຊໍ້າກັນຖືກນໍາໃຊ້.
2. ແນ່ນອນເມື່ອໃຊ້ກັບບາງຟັງຊັນທີ່ບໍ່ສາມາດນຳໃຊ້ໄດ້ໃນສະຖານທີ່ (ຕົວຢ່າງ
"convolve()") ຜົນກະທົບທີ່ບໍ່ຄາດຄິດອາດຈະເກີດຂື້ນ! ພວກເຮົາພະຍາຍາມຊີ້ບອກ "inplace()"-safe
ຫນ້າທີ່ຢູ່ໃນເອກະສານ.
3. ພິມການແປງ, ເຊັ່ນ "float()", ອາດຈະເຮັດໃຫ້ເກີດການຄັດລອກທີ່ເຊື່ອງໄວ້.
ຮັບປະກັນ ຄວາມອຶດອັດ
ຖ້າຫາກວ່າທ່ານໄດ້ຂຽນຫນ້າທີ່ງ່າຍດາຍແລະທ່ານບໍ່ຕ້ອງການໃຫ້ມັນລະເບີດຂຶ້ນໃນໃບຫນ້າຂອງທ່ານຖ້າຫາກວ່າທ່ານ
ຜ່ານມັນເປັນຕົວເລກທີ່ງ່າຍດາຍແທນທີ່ຈະເປັນຕົວແປ PDL. ພຽງແຕ່ໂທຫາຫນ້າທີ່ topdl() ຄັ້ງທໍາອິດ
ເພື່ອເຮັດໃຫ້ມັນປອດໄພ. ຕົວຢ່າງ:
sub myfiddle { ຂອງຂ້ອຍ $pdl = topdl(shift); $pdl->fiddle_foo(...); ... }
"topdl()" ບໍ່ໄດ້ເຮັດສໍາເນົາຖ້າຕົວແປ pdl ຖືກຜ່ານ - ມັນພຽງແຕ່ຜ່ານ -
ເຊິ່ງແນ່ນອນແມ່ນພຶດຕິກໍາທີ່ຕ້ອງການ. ແນ່ນອນ, ປົກກະຕິແມ່ນບໍ່ຈໍາເປັນ
ຫນ້າທີ່ກໍານົດຂອງຜູ້ໃຊ້ທີ່ບໍ່ສົນໃຈພາຍໃນ.
ໃຊ້ PDL::QuickStartp ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net