PDL::QuickStartp - Bulutta Çevrimiçi

Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen PDL::QuickStartp komutudur.

Program:

ADI


PDL::QuickStart - PDL özelliklerine hızlı giriş.

SİNOPSİS


Ana PDL özelliklerinin ve bunların nasıl kullanılacağının kısa bir özeti.

TANIM


Giriş
Perl son derece iyi ve çok yönlü bir kodlama dilidir ve yeni başlayanlar için çok uygundur.
hızlı prototiplemeye olanak tanır. Ancak yakın zamana kadar veri yapılarını desteklemiyordu.
hızlı sayı hesaplaması yapmasına izin verdi.

Ancak Perl v5'in geliştirilmesiyle Perl, 'Nesneler'i satın aldı. Basitçe söylemek gerekirse kullanıcılar
kendi özel veri türlerini tanımlayabilir ve bunları işlemek için özel rutinler yazabilir
ya düşük seviyeli dillerde (C ve Fortran) ya da Perl'ün kendisinde.

Bu, PerlDL geliştiricileri tarafından tamamen istismar edilmiştir. 'PDL' modülü eksiksiz bir
Perl'e Nesne Yönelimli eklenti (her ne kadar bir nesnenin ne olduğunu bilmenize gerek olmasa da)
büyük görüntüler, spektrumlar, zaman gibi büyük N boyutlu veri kümelerine izin veren
saklanacak seri vb. verimli biçimde ve manipüle edildi en kitle. Örneğin PDL ile
modülünde "$a = $b + $c" Perl kodunu yazabiliriz; burada $b ve $c büyük veri kümeleridir (örn.
2048x2048 görüntüler) ve sonucu saniyeden çok daha kısa bir sürede alırsınız.

PDL değişkenleri (ya da bilinen adıyla 'piddle'lar) çok çeşitli
temel veri türleri - diziler bayt, kısa tamsayılar (imzalı veya işaretsiz), uzun olabilir
tam sayılar, kayan noktalar veya çift duyarlıklı kayan noktalar. Ve Nesneye Yönelik doğası nedeniyle
PDL'nin yeni özelleştirilmiş veri türleri bunlardan türetilebilir.

Normal Perl programlarının kullanabileceği PDL modüllerinin yanı sıra PerlDL,
komut satırı Perl kabuğu, 'perldl' olarak adlandırılır ve komut satırı düzenlemeyi destekler. İçinde
çeşitli PDL grafik modülleriyle kombinasyon halinde bu, verilerin kolayca oynatılmasına olanak tanır
ile ve görselleştirildi.

Destek
PDL, hem içinde hem de içinde mevcut olan kapsamlı belgeler içerir. perldl or pdl2 kabuklar ve
"pdldoc" programını kullanarak komut satırından. Daha fazla bilgi için aşağıdakilerden birini deneyin:

pdl> yardım yardım
$ pdldoc

Dokümantasyonun HTML kopyaları da mevcut olmalıdır. Konumlarını bulmak için şunu deneyin:
şu:

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

Perl Veri tipleri ve Nasıl PDL uzanır onları
Temel Perl veri yapıları sayıları tutabilen skaler değişkenlerdir; örneğin $x
veya skaler dizileri, listeleri veya dizileri, örneğin @x ve skalerlerin ilişkisel dizileri/karmaları,
örneğin %x.

Perl v5, Perl veri yapılarını ve nesnelerini tanıtır. Şimdi basit bir skaler değişken $x olsun
kullanıcı tanımlı bir veri türü veya tam gelişmiş bir nesne (aslında bir referans içerir (akıllı bir
"işaretçi") buna işaret eder ancak bu PerlDL'nin sıradan kullanımıyla ilgili değildir)

PerlDL'nin arkasındaki temel fikir, $x'in tam bir 1 boyutlu spektrumu veya 2 boyutlu bir spektrumu tutmasına izin vermektir.
görüntü, 3 boyutlu veri küpü vb. gibi büyük N boyutlu veri kümelerine kadar kullanılabilir. Bunlar olabilir
hepsi aynı anda manipüle edilir, örneğin "$a = $b + 2", içindeki her değer üzerinde bir vektör işlemi yapar
spektrum/görüntü/vb.

Şunu sorabilirsiniz: "Neden bir spektrumu her biri için basit bir Perl @x stili listesi olarak saklamayalım?
piksel bir liste öğesi mi?" Bunun iki temel yanıtı: bellek ve hız. Çünkü biz
spektrumumuzun saf sayılardan oluştuğunu biliyoruz, bunları kompakt bir şekilde tek bir blokta saklayabiliriz
C stili sayısal diziye karşılık gelen bellek. Bu, olduğundan çok daha az bellek kaplıyor
eşdeğer Perl listesi. Daha sonra bu bellek bloğunu hızlı bir eklemeye aktarmak kolaydır
rutine veya dizilerle ilgilenen herhangi bir C fonksiyonuna. Sonuç olarak perlDL çok
hızlı --- örneğin 2048*2048'lik bir görüntüyü tam olarak aynı anda çoğaltabilirsiniz
C veya FORTRAN'ı alırdı (SPARC'ımda 0.1 saniye). Bunun bir başka avantajı da şu:
basit işlemler (örn. "$x += 2"), tüm diziyi umursamadan değiştirebilir
boyutluluğu.

PerlDL kullanırken standart Perl @x değişkenlerini şu şekilde düşünmenin en yararlı olduğunu düşünüyorum:
İçerilebilecek "diziler" olarak genel "şeyler" ve $x gibi PDL değişkenlerinin "listeleri"
listelerde veya karmalarda. PerlDL betiklerimde sıklıkla @x'in bir spektrum listesi içerdiğini düşünüyorum.
veya bir görsel listesi (hatta bir karışım!). Ya da belki birinin hash'i (örneğin %x) olabilir
görüntüler... tek sınır hafızadır!

perlDL değişkenleri bir dizi veri türünü destekler - diziler bayt, kısa tamsayılar olabilir
(imzalı veya işaretsiz), uzun tamsayılar, değişken sayılar veya çift duyarlıklı değişkenler.

kullanım
PerlDL, şu komutu kullanarak Perl betiğinize yüklenir:

PDL'yi kullanın; # Perl komut dosyalarında: standart PerlDL modüllerini kullanın

Ayrıca pek çok genişletme modülü de vardır, örneğin PDL::Graphics::TriD. Bunların çoğu (ancak
bazen uygun olmadığından hepsi değil) standart bir kurala uyun. Eğer öyle diyorsan:

PDL::Graphics::TriD kullanın;

Modülden standart bir listedeki her şeyi içe aktarırsınız. Bazen isteyebilirsin
hiçbir şey içe aktarmayın (örneğin, OO sözdizimini her zaman kullanmak ve ithalat vergisinden tasarruf etmek istiyorsanız).
Bunlar için şunu söylüyorsunuz:

PDL::Graphics::TriD qw(); kullanın

Ve boş "qw()" tırnak işaretleri 'hiçbir şey' anlamına gelmiyor. Ayrıca bir belirtebilirsiniz
Normal Perl yöntemiyle içe aktarılacak işlevlerin listesi.

Ayrıca etkileşimli bir kabuk da vardır, "perldl" veya "pdl2", bkz. perldl veya ayrıntılar için pdl2.

için yaratmak a yeni PDL değişken
PDL değişkeni oluşturmanın bazı yolları şunlardır:

$a = pdl[1..10]; # 1D dizisi
$a = pdl (1,2,3,4); # Aynen
$a = pdl '[1 2 3 4]'; # Aynen
$b = pdl [[1,2,3],[4,5,6]]; # 2D 3x2 dizisi
$b = pdl '[1 2 3; 4 5 6]'; # Aynen
$b = pdl q[1,2,3; 4,5,6]; # Aynen
$b = pdl <
[1 2 3]
[4 5 6]
YENİPDL
$c = pdl q[1 -2]; # 2 ve -1'yi içeren 2 elemanlı piddle
$c = pdl q[1 - 2]; # 2 ve -1'yi içeren 2 elemanlı piddle
$b = pdl 42 # 0 boyutlu skaler
$c = pdl $a; # Yeni bir kopya oluştur

$d = bayt [1..10]; # Bkz. "Tür dönüşümü"
$e = sıfırlar(3,2,4); # 3x2x4 sıfır dolu dizi

$c = rfits $dosyası; # FITS dosyasını oku

@x = ( pdl(42), sıfırlar(3,2,4), rfits($dosya) ); # PDL değişkenlerinin LİSTESİDİR!

The pdl() işlevi bir PDL değişkenini bir skalerden, listeden, listeden başlatmak için kullanılır
referans, başka bir PDL değişkeni veya uygun şekilde biçimlendirilmiş bir dize.

Ayrıca tüm PDL işlevleri normal Perl skalerlerini otomatik olarak PDL değişkenlerine dönüştürür.
anında.

(ayrıca aşağıdaki "Tür Dönüştürme" ve "Giriş/Çıkış" bölümlerine bakın)

Aritmetik (Ve boole ifade)
$a = $b + 2; $a++; $a = $b / $c; # Vesaire.

$c=sqrt($a); $d = log10($b+100); # Vesaire

$e = $a>42; # Vektör koşullu

$e = 42*($a>42) + $a*($a<=42); # Üst kapak

$b = $a->log10 ($a <= 0); # kayan nokta hatasından kaçının

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

$f = burada($a, $a > 10); # burada bir yığın öğe döndürülür
# hangi koşul doğrudur

$a'yı yazdır; # $a dize bağlamında onu N boyutlu biçimde yazdırır

(ve diğer Perl operatörleri/işlevleri)

Koşullu ifadelerde piddle'lar kullanıldığında (örn. "if", "unless" ve "while" yapıları)
yalnızca tam olarak bir öğeye sahip piddle'lara izin verilir, örneğin

$a = pdl (1,0,0,1);
$a-> ise print "ayarlandı"indeks(2);

Boole operatörlerinin genel olarak çok elemanlı piddle'larda geri döndüğünü unutmayın. bu yüzden
aşağıdakiler bir hataya yol açacaktır

$a > 3 ise "tamamdır" yazdır;

"$a > 3" 4 öğeli bir piddle olduğundan. Bunun yerine, tümünün veya herhangi birinin olup olmadığını test etmek için tümünü veya herhangi birini kullanın.
elemanlar şu koşulu yerine getirir:

$a>3 ise "bazıları > 3" yazdırır;
print "hepsi $a>0 olmadığı sürece logaritma alınamaz";

Ayrıca diğer kılavuz sayfalarında açıklanan birçok önceden tanımlanmış fonksiyon da vardır. Kontrol etmek
PDL::İndeks.

Matris fonksiyonlar
'x' matris çarpma operatörü olarak ele geçirildi. örneğin "$c = $ax $b";

perlDL büyük sütun değil satır-büyük olduğundan bu aslında "c(i,j) = toplam_k a(k,j) b(i,k)" -
ancak matrisler yazdırıldığında sonuçlar doğru görünecektir. Sadece endekslerin olduğunu unutmayın
tersine döndü. Örneğin:

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

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

Not: devrik() söylediklerini yapar ve satır vektörlerini dönüştürmenin uygun bir yoludur
sütun vektörleri.

Ne kadar için yazmak a basit işlev
alt nokta ürünü {
benim ($a,$b) = @_;
dönüş toplamı($a*$b) ;
}
1;

Dotproduct.pdl dosyasına konulursa, PDL::AutoLoader kullanıyorsanız otomatik olarak yüklenir (bkz.
altında).

Elbette bu işlev zaten iç işlev olarak mevcuttur, bkz. PDL::Primitive.

Tip Dönüştürme
Için varsayılan pdl() çifttir. Dönüşümler:

$a = kayan nokta($b);
$c = uzun($d); # "uzun" genellikle 4 baytlık bir int'dir
$d = bayt($a);

Ayrıca çift(), kısa(), kısa(), indeks().

NOT: indx() rutini özel bir tam sayı türüdür.
PDL dizin değeri için doğru boyuttur (boyut boyutu,
32 bit (uzun) veya
Perl'in olup olmadığına bağlı olarak 64bit (uzun-uzun) miktar
32bit veya 64bit desteği ile oluşturulmuştur.

Bu rutinler ayrıca uygun kısayolu sağlamak için Perl listelerini otomatik olarak dönüştürür:

$a = bayt [[1..10],[1..10]]; # 2 boyutlu bayt dizisi oluştur
$a = kayan nokta [1..1000]; # 1 boyutlu kayan dizi oluştur

vb.

Baskı
Diziyi otomatik olarak N boyutlu biçimde genişletir:

$a yazdır;

$b = "Cevap = $a ";

Bölümler
PDL'nin çok güçlü, çok boyutlu dilimleme ve kesit alma operatörleri vardır; gör
PDL::Dilimler(3) ayrıntılar için kılavuz sayfası; burada en önemlisini anlatacağız.

PDL, dizilerin sıfır ofsetli olmasıyla Perl/C mirasını gösterir. Böylece 100x100 boyutunda bir görüntü
"0..99,0..99" endeksleri. (Konvansiyon şu ki, merkez pikselin (0,0) koordinatındadır
(0.0,0.0). Tüm PDL grafik fonksiyonları bu tanıma uygundur ve üniteyi gizler
örneğin PPGLOT FORTRAN kitaplığının ofsetleri.

Olağan kongre koordinatını takiben (0,0) sol altta görüntülenir.
bir görüntü gösteriliyor. ""print $a"" vb. kullanıldığında sol üstte görünür.

Basit bölümleme, Perl'e yönelik bir sözdizimi uzantısı olan PDL::NiceSlice'ı kullanır;
bir PDL'ye boş yöntem değiştirici aracılığıyla alt aralıkları belirtin:

$b = $a->($x1:$x2,$y1:$y2,($z1)); # Alt bölümü al

Burada $a 3 boyutlu bir değişkendir ve $b şu şekilde tanımlanan düzlemsel bir kesim alır:
$z1 konumunda $x2, $x1, $y2, $y1'yi sınırlar. $z1 civarındaki parantez şuna neden olur:
önemsiz indeks atlanacak - aksi halde $b üçüncüsüyle üç boyutlu olurdu
sipariş boyutu 1.

PDL dilimlerini, öğe bazında atama operatörünün ".=" her iki tarafına da yerleştirebilirsiniz.
Güneş:

# $bigimage'ın bir kısmını $smallimage'den gelen değerlere ayarlayın
$bigimage->($xa:$xb,$ya:$yb) .= $smallimage;

Diğer bazı çeşitler:

$c = nelem($a); # Piksel sayısı

$val = at($object, $x,$y,$z...) # Perl skaleri olarak konumdaki piksel değeri
$val = $object->at($x,$y,$z...) # eşdeğer (yöntem sözdizimi tamam)

$b = xvals($a); # Diziyi X-koord değerleriyle doldurun (aynı zamanda yvals(), zvals()),
# axisvals($x,$axis) ve radyal mesafe için rvals()
# merkezden).

Girdi / Çıktı
"PDL::IO" modülleri birçok kullanışlı IO formatı fonksiyonunu uygular. Çok fazla olurdu
Her birine örnek vermek gerekirse PDL::IO'da güzel bir genel bakış bulabilirsiniz. İşte bir örneği
PDL'de desteklenen GÇ formatlarından bazıları.

PDL::IO::Çeşitli
Ascii, FITS ve FIGARO/NDF IO rutinleri.

PDL::IO::FastRaw
Makinenizin ham veri türlerini kullanan, taşınabilir olmayan ancak göz kamaştırıcı derecede hızlı bir IO
biçim. Ayrıca belleği korumak ve daha fazla hız elde etmek için bellek eşlemeyi de destekler.

PDL::IO::FlexRaw
Genel ham veri formatları. FastRaw gibi, sadece daha iyi.

PDL::IO::Tarayıcı
Diziler için Curses tarayıcısı.

PDL::IO::Pnm
Portaple bitmap ve pixmap desteği.

PDL::IO::Resim
Önceki modülü ve netpbm'yi kullanmak, kolayca GIF, jpeg yazmayı mümkün kılar
ve basit komutlarla her ne olursa olsun.

Grafik
PerlDL'nin arkasındaki felsefe, onun çeşitli mevcut grafiklerle çalışmasını sağlamaktır.
tek bir paket tüm ihtiyaçları ve insanları karşılayamayacağı için kütüphaneler
kişinin zaten bildiği ve sevdiği paketlerle çalışması. Açıkçası bazı şeyler olacak
işlevsellik açısından örtüşmeler ve bazı tutarlılık ve tekdüzelik eksikliği. Ancak bu izin verir
Hızla gelişen bir alana ayak uydurmak için PDL - en yeni PDL modülleri arayüzler sağlar
OpenGL ve VRML grafiklerine!

PDL::Grafik::PGPLOT
PGPLOT çizgi grafikleri ve görüntü gösterimi için basit bir kütüphane sağlar.

Dahili PDL::Graphics::PGPLOT modülünde bunun için kolay bir arayüz bulunmaktadır.
Ayrı olarak temin edilebilen PGPLOT üst seviye modülündeki rutinleri çağırır.

PDL::Grafik::PLplot
PLplot, birden fazla çıktı sürücüsüyle grafikler oluşturmak için basit bir kütüphane sağlar.
doğrudan toplama sürücüsü dahil.

Bu modül, PLplot üzerine kurulu hem yüksek seviyeli hem de düşük seviyeli işlevsellik sağlar.
düşük seviyeli komutlar hemen hemen PLplot'un C arayüzüne doğrudan bağlanır. Devamını oku
PDL::Graphics::PLplot’ta.

PDL::Grafik::IIS
Birçok gökbilimci SAOimage ve Ximtool'u (veya türevlerini/klonlarını) kullanmayı sever. Bunlar
görüntülerin incelenmesi ve görselleştirilmesi için kullanışlı ücretsiz widget'lardır. (Onlar değil
PerlDL ile sağlanır ancak yurtdışındaki resmi sitelerinden kolayca edinilebilir.
Açık.)

PDL::Graphics::IIS paketi, görüntülerin bu ("IIS")
protokolleri bu araçlara sahip olan eski bir görüntü görüntüleme donanımı öğesinin adıdır.
uygun.)

PDL::Grafikler::TriD
Bkz. PDL::Graphics::TriD, bu OpenGL için 3 boyutlu rutinlerin bir koleksiyonudur ve (yakında)
PDL'den 3B nokta, çizgi ve yüzey çizimlerine izin veren VRML ve diğer 3B formatlar.

Otomatik yükleme
Bkz. PDL::Otomatik Yükleyici. Bu, bir bakıma isteğe bağlı olarak işlevlerin otomatik olarak yüklenmesine olanak tanır.
MatLab kullanıcılarına tanıdık geliyor.

PDL uzantıları normal Perl modülleri olarak da yazılabilir.

PDL kabukları
Perl betiği "pdl2" (veya "perldl"), PDL'ye basit bir komut satırı arayüzü sağlar. Eğer
en yeni Readlines/ReadKey modülleri kuruldu "pdl2" bunu algılar ve etkinleştirir
komut satırı geri çağırma ve düzenleme. Ayrıntılar için man sayfasına bakın.

Örneğin:

% perldl
perlDL kabuk v1.354
PDL KESİNLİKLE HİÇBİR GARANTİ ile birlikte gelir. Ayrıntılar için dosyaya bakın
PDL dağıtımında 'KOPYALAMA'. Bu özgür bir yazılımdır ve siz
belirli koşullar altında yeniden dağıtabilirsiniz, bkz.
ayrıntılar için aynı dosya.
ReadLines, NiceSlice, MultiLines etkin
PDL/default.perldlrc okunuyor...
Doküman veritabanı bulundu /home/pdl/dev/lib/perl5/site_perl/PDL/pdldoc.db
Çevrimiçi yardım için 'yardım' yazın
Çevrimiçi demolar için 'demo' yazın
Yüklenen PDL v2.4.9_003 (kötü değerleri destekler)
pdl> $x = rfits 'm51.fits'
IMAGE verileri okunuyor...
BITPIX = 32 boyut = 147456 piksel
589824 bayt okunuyor
BSCALE = && BZERO =

pdl> PDL::Graphics::PGPLOT; kullanın;
pdl> resim $x
384 renk (384-40) kullanılarak 761'tan 84'e kadar 16 x 99 görüntü gösteriliyor...

İsterseniz bunu Perl hata ayıklayıcısından ("Perl -MPDL -d -e 1") da çalıştırabilirsiniz.

Çeşitli kabuk özellikleri:

p Kabuk takma adı "p", "baskı"nın uygun kısa biçimidir, örn.

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

Başlatma
Dosyalar "~/.perldlrc" ve "local.perldlrc" (geçerli dizinde) şu durumda kaynaklanır:
kurmak. Bu, kullanıcının başlatma için genel ve yerel PDL koduna sahip olmasını sağlar.

Destek
'Yardım' yazın! PDL belgelerinde arama yapılabilir ve herhangi bir belgeye bakılabilir.
fonksiyonu.

Kaçış
"#" karakteriyle başlayan herhangi bir satır, kabuk kaçışı olarak değerlendirilir. Bu karakter
Perl değişkeni $PERLDL_ESCAPE ayarlanarak yapılandırılabilir. Bu, örneğin,
ayarlanabilir "~/.perldlrc".

Aşırı yük operatörler
Aşağıdaki yerleşik Perl operatörleri ve işlevleri PDL'de çalışacak şekilde aşırı yüklenmiştir
değişkenleri:

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

[Tüm tekli işlevler (günah vb.) ile kullanılabilir yerinde() - aşağıdaki "Bellek" konusuna bakın.]

Nesne Yönelimi ve perlDL
PDL işlemleri işlevler ve yöntemler olarak mevcuttur. Böylece yeni türler türetilebilir
özel veri sınıflarını temsil eden nesne.

Aşırı yüklemeyi kullanarak matematiksel operatörlerin istediğinizi yapmasını sağlayabilirsiniz ve PDL
mevcut PDL işlevlerinin değişmeden çalışmasına olanak tanıyan bazı yerleşik hilelere sahiptir.
temel veri temsili büyük ölçüde değişti! Bkz. PDL::Nesneler

Bellek kullanım ve referanslar
Gerçekten çok büyük veri dizileriyle uğraşmak biraz dikkat gerektirebilir. PerlDL birçok şey sağlar
fazladan kopya oluşturmadan büyük dizilerde işlem yapmanıza olanak tanıyan olanaklar
ancak bu, programcının biraz daha fazla düşünmesini ve özen göstermesini gerektirir.

NOT: Çoğu sistemde Perl'ü (derleme seçenekleri sırasında) yapılandırmak daha iyidir.
Perl'ün yerleşik işlevi yerine sistemin "malloc()" işlevini kullanın. Bunun nedeni Perl'ün
biri sanal bellek tüketimi yerine hız için optimize edilmiştir; bu,
Kullanabileceğiniz bellek depolama miktarında iki kat artış. Perl malloc'u
5.004 ve sonrasında, ayarları yapmak için kullanabileceğiniz bir dizi derleme zamanı seçeneği bulunur.
davranışı.

basit aritmetik
$a büyük bir resimse (örneğin 10 MB yer kaplıyorsa) komut

$a = $a + 1;

10MB hafıza daha tüketir. Bunun nedeni "$a+1" ifadesinin bir oluşturmasıdır.
sonucu tutmak için $a'nın geçici kopyası, ardından $a'ya buna bir referans atanır.
Bundan sonra orijinal $a yok edilir, böylece başka bir şey kalmaz. kalıcı hafıza israfı. Ama üzerinde
Küçük bir makinede bellek ayak izindeki büyüme önemli olabilir. Bu
açıkçası bu şekilde yapıldığından "$c=$a+1" beklendiği gibi çalışır.

Ayrıca biri şöyle derse:

$b = $a; # $b ve $a artık aynı veriyi gösteriyor
$a = $a + 1;

O zaman $b ve $a, safça beklendiği gibi, farklı olurlar çünkü yeni bir referans
oluşturulur ve ona $a atanır.

Bununla birlikte, eğer $a büyük bir hafıza domuzu ise (örneğin bir 3D birim), onun bir kopyasını oluşturmak işe yaramayabilir.
iyi bir şey ol. Yukarıdaki örnekte bu hafıza yükünden şu şekilde kaçınılabilir:

$a++;

"++,+=,--,-=" vb. işlemlerin tümü, uygulamanın özel bir "yerinde" sürümünü çağırır.
aritmetik altprogram. Bu, daha fazla belleğe gerek olmadığı anlamına gelir - bunun dezavantajı
eğer "$b=$a" ise $b de artırılır. Bir kopyayı açıkça zorlamak için:

$b = pdl $a; # Gerçek kopya

veya alternatif olarak belki daha iyi bir stil:

$b = $a->kopyala;

fonksiyonlar
Çoğu fonksiyon, örneğin "log()", kendi değerlerinin dönüşümü olan bir sonuç döndürür.
argüman. Bu iyi bir programlama pratiği sağlar. Ancak birçok işlem yapılabilir
"yerinde" yapılır ve büyük diziler kullanımdayken ve bellek tam kapasitede olduğunda bu gerekli olabilir.
ayrıcalıklı. Bu koşullar altında operatör yerinde() engelleyen sağlanır
ekstra kopya ve argümanın değiştirilmesine izin verir. Örneğin:

$x = günlük($dizi); # $dizi etkilenmedi
log( inplace($bigarray) ); # $bigarray yerinde değiştirildi

UYARILAR:

1. Yinelenen referanslarla ilgili olağan uyarılar geçerlidir.

2. Açıkçası, yerinde uygulanamayan bazı işlevlerle birlikte kullanıldığında (örn.
"convolve()") beklenmeyen etkiler ortaya çıkabilir! "inplace()" güvenli olduğunu belirtmeye çalışıyoruz
belgelerdeki işlevler.

3. "Float()" gibi tür dönüşümleri gizli kopyalamaya neden olabilir.

sağlanması budalalık
Basit bir fonksiyon yazdıysanız ve bunun karşınıza çıkmasını istemiyorsanız
PDL değişkeni yerine basit bir sayı iletin. Basitçe işlevi çağırın topdl() ilk
güvenli hale getirmek için. Örneğin:

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

"topdl()", eğer bir pdl değişkeni aktarılırsa kopyalama yapmaz - sadece başarısız olur -
açıkça istenen davranış budur. Normalde rutin elbette gerekli değildir
dahili bilgileri umursamayan kullanıcı tanımlı işlevler.

Onworks.net hizmetlerini kullanarak PDL::QuickStartp'i çevrimiçi kullanın



En yeni Linux ve Windows çevrimiçi programları