PDL::QuickStartp - Dalam Talian di Awan

Ini ialah arahan PDL::QuickStartp yang boleh dijalankan dalam penyedia pengehosan percuma OnWorks menggunakan salah satu daripada berbilang stesen kerja dalam talian percuma kami seperti Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS.

JADUAL:

NAMA


PDL::QuickStart - Pengenalan pantas kepada ciri PDL.

SINOPSIS


Ringkasan ringkas ciri PDL utama dan cara menggunakannya.

DESCRIPTION


Pengenalan
Perl ialah bahasa skrip yang sangat baik dan serba boleh, sangat sesuai untuk pemula dan
membolehkan prototaip pantas. Walau bagaimanapun sehingga baru-baru ini ia tidak menyokong struktur data yang
membolehkannya melakukan penyusutan nombor dengan pantas.

Bagaimanapun dengan pembangunan Perl v5, Perl memperoleh 'Objek'. Secara ringkasnya pengguna
boleh menentukan jenis data khas mereka sendiri, dan menulis rutin tersuai untuk memanipulasinya
sama ada dalam bahasa peringkat rendah (C dan Fortran) atau dalam Perl sendiri.

Ini telah dieksploitasi sepenuhnya oleh pembangun PerlDL. Modul 'PDL' adalah lengkap
Sambungan Berorientasikan Objek kepada Perl (walaupun anda tidak perlu mengetahui maksud objek
gunakannya) yang membenarkan set data N-dimensi yang besar, seperti imej besar, spektrum, masa
siri, dll untuk disimpan dengan cekap dan dimanipulasi en ramai. Contohnya dengan PDL
modul kita boleh menulis kod Perl "$a = $b + $c", di mana $b dan $c ialah set data yang besar (cth.
imej 2048x2048), dan dapatkan hasilnya dalam hanya sebahagian kecil saat.

Pembolehubah PDL (atau 'piddles' seperti yang telah diketahui) menyokong pelbagai jenis
jenis data asas - tatasusunan boleh menjadi bait, integer pendek (ditandatangani atau tidak ditandatangani), panjang
integer, terapung atau terapung ketepatan berganda. Dan kerana sifat Berorientasikan Objek
Jenis data tersuai baharu PDL boleh diperoleh daripadanya.

Serta modul PDL, yang boleh digunakan oleh program Perl biasa, PerlDL disertakan dengan a
baris perintah Perl shell, dipanggil 'perldl', yang menyokong penyuntingan baris arahan. Dalam
gabungan dengan pelbagai modul grafik PDL ini membolehkan data dimainkan dengan mudah
dengan dan divisualisasikan.

Bantuan
PDL mengandungi dokumentasi yang luas, tersedia kedua-duanya dalam perldl or pdl2 cengkerang dan
daripada baris arahan, menggunakan program "pdldoc". Untuk maklumat lanjut cuba salah satu daripada:

pdl> bantu membantu
$ pdldoc

Salinan HTML dokumentasi juga harus tersedia. Untuk mencari lokasi mereka, cuba
yang berikut:

pdl> foreach ( peta{"$_/PDL/HtmlDocs"}@INC ) { p "$_\n" jika -d $_ }

Perl Jenis data and bagaimana PDL Memanjangkan mereka
Struktur data Perl asas ialah pembolehubah skalar, cth. $x, yang boleh memuatkan nombor
atau rentetan, senarai atau tatasusunan skalar, mis. @x, dan tatasusunan bersekutu/cincang skalar,
cth. %x.

Perl v5 memperkenalkan kepada struktur dan objek data Perl. Pembolehubah skalar mudah $x kini menjadi
jenis data yang ditentukan pengguna atau objek penuh (ia sebenarnya memegang rujukan (a smart
"penunjuk") kepada ini tetapi itu tidak berkaitan untuk kegunaan biasa perlDL)

Idea asas di sebalik perlDL adalah untuk membenarkan $x memegang keseluruhan spektrum 1D, atau 2D
imej, kiub data 3D dan sebagainya sehingga set data N-dimensi yang besar. Ini boleh jadi
dimanipulasi sekaligus, mis. "$a = $b + 2" melakukan operasi vektor pada setiap nilai dalam
spektrum/imej/dsb.

Anda mungkin bertanya: "Mengapa tidak simpan sahaja spektrum sebagai senarai gaya Perl @x yang ringkas dengan setiap satu
pixel menjadi item senarai?" Dua jawapan utama untuk ini ialah memori and kelajuan. Kerana kita
tahu spektrum kita terdiri daripada nombor tulen kita boleh menyimpannya padat dalam satu blok
memori yang sepadan dengan tatasusunan angka gaya C. Ini menggunakan LOT kurang memori daripada
senarai Perl yang setara. Ia kemudiannya mudah untuk menghantar blok memori ini kepada penambahan pantas
rutin, atau kepada mana-mana fungsi C lain yang berkaitan dengan tatasusunan. Akibatnya perlDL sangat
cepat --- sebagai contoh seseorang boleh mendarab imej 2048*2048 dalam masa yang sama dengannya
akan mengambil C atau FORTRAN (0.1 saat pada SPARC saya). Satu lagi kelebihan ini ialah untuk
operasi mudah (cth. "$x += 2") seseorang boleh memanipulasi keseluruhan tatasusunan tanpa mengambil berat tentang
dimensinya.

Saya dapati apabila menggunakan perlDL adalah paling berguna untuk memikirkan pembolehubah Perl @x standard sebagai
"senarai" bagi "benda" generik dan pembolehubah PDL seperti $x sebagai "tatasusunan" yang boleh terkandung
dalam senarai atau cincang. Selalunya dalam skrip perlDL saya, saya mempunyai @x mengandungi senarai spektrum,
atau senarai imej (atau campuran!). Atau mungkin seseorang boleh mempunyai cincangan (cth. %x) daripada
imej... satu-satunya had adalah ingatan!

pembolehubah perlDL menyokong pelbagai jenis data - tatasusunan boleh menjadi bait, integer pendek
(ditandatangani atau tidak ditandatangani), integer panjang, terapung atau terapung ketepatan berganda.

Penggunaan
PerlDL dimuatkan ke dalam skrip Perl anda menggunakan arahan ini:

gunakan PDL; # dalam skrip Perl: gunakan modul perlDL standard

Terdapat juga banyak modul sambungan, mis. PDL::Grafik::TriD. Kebanyakan ini (tetapi
bukan semua kerana kadangkala tidak sesuai) mengikut konvensyen standard. Jika kamu berkata:

gunakan PDL::Graphics::TriD;

Anda mengimport segala-galanya dalam senarai standard daripada modul. Kadang-kadang anda mungkin mahu
import apa-apa (cth. jika anda mahu menggunakan sintaks OO sepanjang masa dan menyimpan cukai import).
Untuk ini anda berkata:

gunakan PDL::Graphics::TriD qw();

Dan petikan kosong "qw()" diiktiraf sebagai bermaksud 'tiada apa-apa'. Anda juga boleh menentukan a
senarai fungsi untuk diimport dengan cara Perl biasa.

Terdapat juga cangkerang interaktif, "perldl" atau "pdl2", lihat perldl atau pdl2 untuk butiran.

Untuk mewujudkan a baru PDL berubah-ubah
Berikut ialah beberapa cara untuk mencipta pembolehubah PDL:

$a = pdl [1..10]; # Tatasusunan 1D
$a = pdl (1,2,3,4); # Begitu juga
$a = pdl '[1 2 3 4]'; # Begitu juga
$b = pdl [[1,2,3],[4,5,6]]; # Tatasusunan 2D 3x2
$b = pdl '[1 2 3; 4 5 6]'; # Begitu juga
$b = pdl q[1,2,3; 4,5,6]; # Begitu juga
$b = pdl <<NEWPDL # Begitu juga
[1 2 3]
[4 5 6]
NEWPDL
$c = pdl q[1 -2]; # Piddle 2-elemen yang mengandungi 1 dan -2
$c = pdl q[1 - 2]; # Piddle 2-elemen yang mengandungi 1 dan -2
$b = pdl 42 # skalar 0 dimensi
$c = pdl $a; # Buat salinan baharu

$d = bait [1..10]; # Lihat "Penukaran jenis"
$e = sifar(3,2,4); # Tatasusunan isi sifar 3x2x4

$c = rfits $file; # Baca fail FITS

@x = ( pdl(42), sifar(3,2,4), rfits($file) ); # Merupakan SENARAI pembolehubah PDL!

. pdl() fungsi digunakan untuk memulakan pembolehubah PDL daripada skalar, senarai, senarai
rujukan, pembolehubah PDL lain, atau rentetan yang diformat dengan betul.

Selain itu, semua fungsi PDL secara automatik menukar skalar Perl biasa kepada pembolehubah PDL
on-the-fly.

(lihat juga bahagian "Penukaran Jenis" dan "Input/Output" di bawah)

Aritmetik (Dan boolean ungkapan)
$a = $b + 2; $a++; $a = $b / $c; # Dan lain-lain.

$c=sqrt($a); $d = log10($b+100); # Dan lain-lain

$e = $a>42; # Vektor bersyarat

$e = 42*($a>42) + $a*($a<=42); # Topi atas

$b = $a->log10 melainkan ada ($a <= 0); # elakkan ralat titik terapung

$a = $a / ( maks($a) - min($a) );

$f = where($a, $a > 10); # di mana mengembalikan piddle elemen untuk
# yang mana syaratnya adalah benar

cetak $a; # $a dalam konteks rentetan mencetaknya dalam format N-dimensi

(dan pengendali/fungsi Perl lain)

Apabila menggunakan piddle dalam ungkapan bersyarat (iaitu binaan "jika", "melainkan" dan "sementara")
hanya piddle dengan tepat satu elemen dibenarkan, mis.

$a = pdl (1,0,0,1);
cetak "ditetapkan" jika $a->indeks(2);

Ambil perhatian bahawa pengendali boolean kembali dalam piddle berbilang elemen umum. Oleh itu,
berikut akan menimbulkan ralat

cetak "adalah ok" jika $a > 3;

kerana "$a > 3" ialah piddle dengan 4 elemen. Sebaliknya gunakan semua atau mana-mana untuk menguji sama ada semua atau mana-mana
unsur-unsur memenuhi syarat:

cetak "ada yang > 3" jika ada $a>3;
cetak "tidak boleh mengambil logaritma" melainkan semua $a>0;

Terdapat juga banyak fungsi yang telah ditetapkan, yang diterangkan pada halaman manual lain. Semak
PDL::Indeks.

Matrix fungsi
'x' dirampas sebagai pengendali pendaraban matriks. cth. "$c = $a x $b";

perlDL ialah baris-utama bukan lajur utama jadi ini sebenarnya "c(i,j) = sum_k a(k,j) b(i,k)" -
tetapi apabila matriks dicetak hasilnya akan kelihatan betul. Ingat sahaja indeksnya
terbalik. cth.:

$a = [ $b = [
[ 1 2 3 0] [1 1]
[ 1 -1 2 7] [0 2]
[ 1 0 0 1] [0 2]
] [1 1]
]

memberikan $c = [
[ 1 11]
[ 8 10]
[ 2 2]
]

Catatan: transpose() melakukan apa yang dikatakan dan merupakan cara yang mudah untuk mengubah vektor baris menjadi
vektor lajur.

Cara kepada menulis a mudah fungsi
sub dotproduct {
saya ($a,$b) = @_;
pulangan jumlah($a*$b) ;
}
1;

Jika dimasukkan ke dalam fail dotproduct.pdl akan dimuatkan secara automatik jika anda menggunakan PDL::AutoLoader (lihat
di bawah).

Sudah tentu, fungsi ini sudah tersedia sebagai fungsi dalaman, lihat PDL::Primitive.

Jenis Penukaran
Lalai untuk pdl() adalah berganda. Penukaran ialah:

$a = float($b);
$c = panjang($d); # "panjang" biasanya int 4 bait
$d = bait($a);

Juga double(), pendek(), ushort(), indx().

NOTA: Rutin indx() ialah jenis integer khas yang
ialah saiz yang betul untuk nilai indeks PDL (saiz dimensi,
indeks, atau tawaran) yang boleh sama ada 32bit (panjang) atau
Kuantiti 64bit (panjang) bergantung pada sama ada perl
dibina dengan sokongan 32bit atau 64bit.

Rutin ini juga menukar senarai Perl secara automatik untuk membolehkan trengkas yang mudah:

$a = bait [[1..10],[1..10]]; # Buat tatasusunan bait 2D
$a = terapung [1..1000]; # Buat tatasusunan apungan 1D

dan lain-lain.

Printing
Mengembangkan tatasusunan secara automatik dalam format N-dimensi:

cetak $a;

$b = "Jawapan ialah = $a ";

seksyen
PDL mempunyai operator penghirisan dan pembahagian berbilang dimensi yang sangat berkuasa; lihat
PDL::Keping(3) halaman manual untuk butiran; kami akan menerangkan yang paling penting di sini.

PDL menunjukkan warisan Perl/Cnya dalam tatasusunan yang diimbangi sifar. Oleh itu imej 100x100 mempunyai
indeks "0..99,0..99". (Konvensyen itu ialah pusat daripada piksel (0,0) berada pada koordinat
(0.0,0.0). Semua fungsi grafik PDL mematuhi definisi ini dan menyembunyikan unit
mengimbangi, sebagai contoh, perpustakaan PGPLOT FORTRAN.

Mengikuti koordinat konvensyen biasa (0,0) dipaparkan di bahagian bawah kiri apabila
memaparkan imej. Ia muncul di bahagian atas sebelah kiri apabila menggunakan ""cetak $a"" dsb.

Pembahagian mudah menggunakan sambungan sintaks kepada Perl, PDL::NiceSlice, yang membolehkan anda
tentukan subjulat melalui pengubah kaedah nol kepada PDL:

$b = $a->($x1:$x2,$y1:$y2,($z1)); # Ambil subseksyen

Di sini, $a ialah pembolehubah 3 dimensi, dan $b mendapat potongan satah yang ditakrifkan oleh
had $x1, $x2, $y1, $y2, di lokasi $z1. Tanda kurung sekitar $z1 menyebabkan
indeks remeh perlu ditinggalkan -- jika tidak $b akan menjadi tiga dimensi dengan yang ketiga
dimensi pesanan 1.

Anda boleh meletakkan kepingan PDL pada kedua-dua belah pengendali tugasan mengikut unsur ".=", seperti
Sun:

# Tetapkan sebahagian daripada $bigimage kepada nilai daripada $smallimage
$bigimage->($xa:$xb,$ya:$yb) .= $smallimage;

Beberapa kepelbagaian lain:

$c = nelem($a); # Bilangan piksel

$val = at($objek, $x,$y,$z...) # Nilai piksel pada kedudukan, sebagai skalar Perl
$val = $objek->at($x,$y,$z...) # setara (sintaks kaedah OK)

$b = xvals($a); # Isi tatasusunan dengan nilai X-coord (juga yvals(), zvals(),
# axisvals($x,$axis) dan rvals() untuk jarak jejarian
# dari tengah).

Input / Output
Modul "PDL::IO" melaksanakan beberapa fungsi format IO yang berguna. Ia akan menjadi terlalu banyak
untuk memberikan contoh setiap satu, tetapi anda boleh mendapatkan gambaran keseluruhan yang bagus di PDL::IO. Berikut adalah contoh daripada
beberapa format IO yang disokong dalam PDL.

PDL::IO::Lain-lain
Rutin Ascii, FITS dan FIGARO/NDF IO.

PDL::IO::FastRaw
Menggunakan jenis data mentah mesin anda, IO yang tidak mudah alih tetapi sangat pantas
format. Juga menyokong pemetaan memori untuk menjimatkan memori serta mendapatkan lebih kelajuan.

PDL::IO::FlexRaw
Format data mentah umum. Seperti FastRaw, hanya lebih baik.

PDL::IO::Pelayar
Pelayar Curses untuk tatasusunan.

PDL::IO::Pnm
Sokongan bitmap dan pixmap Portaple.

PDL::IO::Pic
Menggunakan modul sebelumnya dan netpbm, membolehkan anda menulis GIF, jpeg dengan mudah
dan apa sahaja dengan arahan mudah.

Grafik
Falsafah di sebalik perlDL adalah untuk menjadikannya berfungsi dengan pelbagai grafik sedia ada
perpustakaan kerana tiada pakej tunggal akan memenuhi semua keperluan dan semua orang dan ini membolehkan
seseorang untuk bekerja dengan pakej yang sudah diketahui dan disukainya. Jelas sekali akan ada
bertindih dalam kefungsian dan beberapa kekurangan konsistensi dan keseragaman. Bagaimanapun ini membolehkan
PDL untuk bersaing dengan bidang yang pesat membangun - modul PDL terkini menyediakan antara muka
kepada grafik OpenGL dan VRML!

PDL::Grafik::PGPLOT
PGPLOT menyediakan perpustakaan ringkas untuk grafik garisan dan paparan imej.

Terdapat antara muka yang mudah untuk ini dalam modul dalaman PDL::Graphics::PGPLOT, yang
memanggil rutin dalam modul peringkat atas PGPLOT yang tersedia secara berasingan.

PDL::Grafik::PLplot
PLplot menyediakan perpustakaan ringkas untuk mencipta grafik dengan berbilang pemacu output,
termasuk pemandu terus ke piddle.

Modul ini menyediakan kedua-dua fungsi peringkat tinggi dan rendah yang dibina pada PLplot. The
arahan peringkat rendah adalah pengikatan langsung kepada antara muka C PLplot. Baca lagi
di PDL::Graphics::PLplot.

PDL::Grafik::IIS
Ramai ahli astronomi suka menggunakan SAOimage dan Ximtool (atau terdapat derivasi/klon). Ini
ialah widget percuma yang berguna untuk pemeriksaan dan visualisasi imej. (Mereka tidak
disediakan dengan perlDL tetapi boleh didapati dengan mudah dari tapak rasmi mereka di luar
bersih.)

Pakej PDL::Graphics::IIS menyediakan membolehkan seseorang memaparkan imej dalam ini ("IIS"
ialah nama item purba perkakasan paparan imej yang protokolnya alat ini
mematuhi.)

PDL::Grafik::TriD
Lihat PDL::Graphics::TriD, ini ialah koleksi rutin 3D untuk OpenGL dan (tidak lama lagi)
VRML dan format 3D lain yang membenarkan plot titik, garisan dan permukaan 3D daripada PDL.

Autoloading
Lihat PDL::AutoLoader. Ini membolehkan seseorang untuk autoload fungsi atas permintaan, dengan cara yang mungkin
biasa kepada pengguna MatLab.

Seseorang juga boleh menulis sambungan PDL sebagai modul Perl biasa.

PDL cengkerang
Skrip Perl "pdl2" (atau "perldl") menyediakan antara muka baris arahan yang mudah kepada PDL. Jika
modul Readlines/ReadKey terkini telah dipasang "pdl2" mengesan ini dan membolehkannya
ingatan dan penyuntingan baris arahan. Lihat halaman lelaki untuk butiran.

cth:

% perldl
shell perlDL v1.354
PDL datang dengan SAMA SEKALI TIADA WARANTI. Untuk butiran, lihat fail
'MENYALIN' dalam edaran PDL. Ini adalah perisian percuma dan anda
dialu-alukan untuk mengagihkannya semula dalam keadaan tertentu, lihat
fail yang sama untuk butiran.
ReadLines, NiceSlice, MultiLine didayakan
Membaca PDL/default.perldlrc...
Pangkalan data dokumen ditemui /home/pdl/dev/lib/perl5/site_perl/PDL/pdldoc.db
Taip 'help' untuk mendapatkan bantuan dalam talian
Taip 'demo' untuk demo dalam talian
PDL v2.4.9_003 dimuatkan (menyokong nilai buruk)
pdl> $x = rfits 'm51.fits'
Membaca data IMAGE...
BITPIX = 32 saiz = 147456 piksel
Membaca 589824 bait
BSCALE = && BZERO =

pdl> gunakan PDL::Graphics::PGPLOT;
pdl> imag $x
Memaparkan imej 384 x 384 daripada 40 hingga 761, menggunakan 84 warna (16-99)...

Anda juga boleh menjalankannya daripada penyahpepijat Perl ("perl -MPDL -d -e 1") jika anda mahu.

Pelbagai ciri cangkerang:

p Alias ​​cangkerang "p" menjadi bentuk pendek "cetak" yang mudah, cth.

pdl> p satu 5,3
[
[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]
]

Pengawalan
Fail-fail "~/.perldlrc" dan "local.perldlrc" (dalam direktori semasa) diperoleh jika
dijumpai. Ini membolehkan pengguna mempunyai kod PDL global dan tempatan untuk permulaan.

Bantuan
Taip 'help'! Seseorang boleh mencari dokumentasi PDL, dan mencari dokumentasi pada mana-mana
fungsi.

Melarikan diri
Mana-mana baris yang bermula dengan aksara "#" dianggap sebagai pelarian shell. watak ini
boleh dikonfigurasikan dengan menetapkan pembolehubah Perl $PERLDL_ESCAPE. Ini boleh, sebagai contoh,
ditetapkan dalam "~/.perldlrc".

Sarat pengendali
Pengendali dan fungsi Perl terbina berikut telah terlebih beban untuk berfungsi pada PDL
pemboleh ubah:

+ - * / > = > & | ^ == != ** % ! ~
log dosa abs atan2 sqrt cos exp

[Semua fungsi unary (dosa dll.) boleh digunakan dengan inplace() - lihat "Memori" di bawah.]

Orientasi Objek and perlDL
Operasi PDL tersedia sebagai fungsi dan kaedah. Oleh itu seseorang boleh memperoleh jenis baru
objek, untuk mewakili kelas data tersuai.

Dengan menggunakan beban berlebihan seseorang boleh membuat pengendali matematik melakukan apa sahaja yang anda suka, dan PDL
mempunyai beberapa helah terbina dalam yang membolehkan fungsi PDL sedia ada berfungsi tidak berubah, walaupun jika
perwakilan data asas telah banyak berubah! Lihat PDL::Objek

Memori penggunaan and rujukan
Bermain-main dengan tatasusunan data yang sangat besar mungkin memerlukan sedikit perhatian. perlDL menyediakan banyak
kemudahan untuk membolehkan anda melakukan operasi pada tatasusunan besar tanpa menjana salinan tambahan
walaupun ini memerlukan sedikit pemikiran dan penjagaan daripada pengaturcara.

NOTA: Pada kebanyakan sistem adalah lebih baik untuk mengkonfigurasi Perl (semasa pilihan binaan) kepada
gunakan fungsi sistem "malloc()" dan bukannya fungsi terbina dalam Perl. Ini kerana Perl
satu dioptimumkan untuk kelajuan dan bukannya penggunaan memori maya - ini boleh mengakibatkan
faktor dua peningkatan dalam jumlah storan memori yang boleh anda gunakan. Perl malloc
dalam 5.004 dan kemudiannya mempunyai beberapa pilihan masa kompilasi yang boleh anda gunakan untuk menala
tingkah laku.

Aritmetik mudah
Jika $a ialah imej besar (cth. menduduki 10MB) maka perintah itu

$a = $a + 1;

memakan 10MB lagi memori. Ini kerana ungkapan "$a+1" mencipta a
salinan sementara $a untuk menyimpan keputusan, kemudian $a diberikan rujukan untuk itu.
Selepas ini, $a asal dimusnahkan jadi tidak ada kekal pembaziran ingatan. Tetapi pada
mesin kecil, pertumbuhan dalam jejak ingatan boleh menjadi besar. Ia adalah
jelas dilakukan dengan cara ini supaya "$c=$a+1" berfungsi seperti yang diharapkan.

Juga jika seseorang berkata:

$b = $a; # $b dan $a kini menunjuk kepada data yang sama
$a = $a + 1;

Kemudian $b dan $a akhirnya menjadi berbeza, seperti yang dijangkakan secara naif, kerana rujukan baharu
dicipta dan $a diberikan kepadanya.

Walau bagaimanapun, jika $a adalah babi ingatan yang besar (cth. volum 3D) mencipta salinannya mungkin tidak
menjadi perkara yang baik. Seseorang boleh mengelakkan overhed memori ini dalam contoh di atas dengan berkata:

$a++;

Operasi "+++=,--,-=", dsb. semuanya memanggil versi khas "di tempat" bagi
subrutin aritmetik. Ini bermakna tiada lagi memori diperlukan - kelemahannya ialah
bahawa jika "$b=$a" maka $b juga dinaikkan. Untuk memaksa salinan secara eksplisit:

$b = pdl $a; # Salinan sebenar

atau, sebagai alternatif, mungkin gaya yang lebih baik:

$b = $a->salinan;

Fungsi
Kebanyakan fungsi, cth. "log()", kembalikan hasil yang merupakan transformasi mereka
hujah. Ini menjadikan amalan pengaturcaraan yang baik. Walau bagaimanapun banyak operasi boleh dilakukan
dilakukan "di tempat" dan ini mungkin diperlukan apabila tatasusunan besar sedang digunakan dan memori berada di
premium. Untuk keadaan ini pengendali inplace() disediakan yang menghalang
salinan tambahan dan membenarkan hujah diubah suai. cth.:

$x = log($array); # $array tidak terjejas
log( inplace($bigarray) ); # $bigarray berubah di situ

AMARAN:

1. Kaveat biasa mengenai rujukan pendua dikenakan.

2. Jelas sekali apabila digunakan dengan beberapa fungsi yang tidak boleh digunakan secara in situ (cth.
"convolve()") kesan yang tidak dijangka mungkin berlaku! Kami cuba menunjukkan "inplace()"-safe
fungsi dalam dokumentasi.

3. Jenis penukaran, seperti "float()", boleh menyebabkan penyalinan tersembunyi.

memastikan kebodohan
Jika anda telah menulis fungsi mudah dan anda tidak mahu ia meletup di muka anda jika anda
luluskan nombor mudah dan bukannya pembolehubah PDL. Cukup panggil fungsi topdl() pertama
untuk menjadikannya selamat. cth.:

sub myfiddle { $pdl saya = topdl(shift); $pdl->fiddle_foo(...); ... }

"topdl()" TIDAK melakukan salinan jika pembolehubah pdl diluluskan - ia hanya gagal -
yang jelas merupakan tingkah laku yang diingini. Rutin sudah tentu tidak perlu dalam keadaan biasa
fungsi yang ditentukan pengguna yang tidak mengambil berat tentang dalaman.

Gunakan PDL::QuickStartp dalam talian menggunakan perkhidmatan onworks.net



Program dalam talian Linux & Windows terkini