PDL::QuickStartp - Online w chmurze

To jest polecenie PDL::QuickStartp, które można uruchomić w bezpłatnym dostawcy hostingu OnWorks przy użyciu jednej z naszych wielu bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online systemu MAC OS

PROGRAM:

IMIĘ


PDL::QuickStart — szybkie wprowadzenie do funkcji PDL.

STRESZCZENIE


Krótkie podsumowanie głównych funkcji PDL i sposobu ich wykorzystania.

OPIS


Wprowadzenie
Perl jest niezwykle dobrym i wszechstronnym językiem skryptowym, doskonale nadającym się dla początkujących i
pozwala na szybkie prototypowanie. Jednak do niedawna nie obsługiwał struktur danych, które
pozwoliło mu na szybkie przetwarzanie liczb.

Jednak wraz z rozwojem Perla v5 Perl nabył „Obiekty”. Mówiąc najprościej, użytkownicy
może definiować własne specjalne typy danych i pisać niestandardowe procedury do manipulowania nimi
albo w językach niskiego poziomu (C i Fortran), albo w samym Perlu.

Zostało to w pełni wykorzystane przez programistów PerlDL. Moduł „PDL” jest kompletny
Obiektowe rozszerzenie do Perla (chociaż nie musisz wiedzieć, do czego służy obiekt
użyj go), co pozwala na duże N-wymiarowe zbiory danych, takie jak duże obrazy, widma, czas
serie itp., które mają być przechowywane skutecznie i zmanipulowane en masa. Na przykład z PDL
module możemy napisać kod Perla „$a = $b + $c”, gdzie $b i $c to duże zbiory danych (np.
2048x2048 obrazów), a wynik uzyskasz w ułamku sekundy.

Zmienne PDL (lub „piddles”, jak je zaczęto nazywać) obsługują szeroki zakres
podstawowe typy danych - tablice mogą składać się z bajtów, krótkich liczb całkowitych (ze znakiem lub bez znaku), długich
liczby całkowite, zmiennoprzecinkowe lub zmiennoprzecinkowe o podwójnej precyzji. A ze względu na obiektową naturę
Można z nich wyprowadzić nowe, dostosowane typy danych PDL.

Oprócz modułów PDL, których można używać w normalnych programach Perla, PerlDL zawiera moduł
wiersz poleceń Powłoka Perla, zwana „perldl”, która obsługuje edycję wiersza poleceń. W
w połączeniu z różnymi modułami graficznymi PDL umożliwia to łatwe odtwarzanie danych
z i wizualizowane.

Pomoc
PDL zawiera obszerną dokumentację, dostępną zarówno w środowisku perdl or pdl2 skorupy i
z wiersza poleceń za pomocą programu „pdldoc”. Aby uzyskać więcej informacji, wypróbuj jedną z poniższych opcji:

pdl> pomóż, pomóż
$ pdldoc

Powinny być również dostępne kopie dokumentacji w formacie HTML. Aby znaleźć ich lokalizację, spróbuj
następujące brzmienie:

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

Perl Typy danych i w jaki sposób PDL rozciąga się im
Podstawowymi strukturami danych Perla są zmienne skalarne, np. $x, które mogą przechowywać liczby
lub ciągi znaków, listy lub tablice skalarów, np. @x, oraz tablice/hasze asocjacyjne skalarów,
np. %x.

Perl v5 wprowadza do Perla struktury danych i obiekty. Prosta zmienna skalarna $x będzie teraz
typ danych zdefiniowany przez użytkownika lub pełny obiekt (w rzeczywistości zawiera referencję (aplikacja smart
„wskaźnik”) do tego, ale nie ma to znaczenia dla zwykłego użycia PerlDL)

Podstawową ideą perlDL jest umożliwienie $x przechowywania całego widma 1D lub 2D
obraz, kostka danych 3D i tak dalej, aż do dużych, N-wymiarowych zbiorów danych. Mogą to być
manipulowane jednocześnie, np. "$a = $b + 2" wykonuje operację wektorową na każdej wartości w pliku
widmo/obraz/itp.

Możesz zapytać: „Dlaczego po prostu nie zapisać widma jako prostej listy w stylu Perla @x z każdym widmem
piksel jest elementem listy?” Dwie kluczowe odpowiedzi na to pytanie to: pamięć i prędkość. Ponieważ my
wiedząc, że nasze widmo składa się z czystych liczb, możemy je kompaktowo przechowywać w jednym bloku
pamięci odpowiadającej tablicy numerycznej w stylu C. Zajmuje to DUŻO mniej pamięci niż
równoważna lista Perla. Można wtedy łatwo przekazać ten blok pamięci do szybkiego dodawania
procedury lub do dowolnej innej funkcji C, która zajmuje się tablicami. W rezultacie perlDL jest bardzo
szybko --- na przykład można pomnożyć obraz 2048*2048 dokładnie w tym samym czasie
wziąłby C lub FORTRAN (0.1 sekundy na moim SPARC). Kolejną zaletą jest to, że dla
prostymi operacjami (np. "$x += 2") można manipulować całą tablicą, nie martwiąc się o to
jego wymiarowość.

Uważam, że podczas używania PerlDL najbardziej przydatne jest myślenie o standardowych zmiennych Perla @x jako
„listy” ogólnych „rzeczy” i zmienne PDL, takie jak $x, jako „tablice”, które mogą być zawarte
na listach lub skrótach. Dość często w moich skryptach PerlDL mam @x zawierający listę widm,
lub listę obrazów (lub nawet mieszankę!). A może można mieć skrót (np. %x) wynoszący
obrazy... jedynym ograniczeniem jest pamięć!

Zmienne perlDL obsługują szereg typów danych - tablice mogą składać się z bajtów, krótkich liczb całkowitych
(ze znakiem lub bez znaku), długie liczby całkowite, liczby zmiennoprzecinkowe lub liczby zmiennoprzecinkowe o podwójnej precyzji.

Stosowanie
PerlDL jest ładowany do skryptu Perla za pomocą tego polecenia:

użyj języka PDL; # w skryptach Perla: użyj standardowych modułów PerlDL

Istnieje również wiele modułów rozszerzeń, np. PDL::Graphics::TriD. Większość z nich (ale
nie wszystkie, bo czasami nie jest to właściwe) stosują się do standardowej konwencji. Jeśli powiesz:

użyj PDL::Graphics::TriD;

Importujesz wszystko ze standardowej listy z modułu. Czasami możesz chcieć
nic nie importuj (np. jeśli chcesz cały czas używać składni OO i zapisać podatek importowy).
Dla nich mówisz:

użyj PDL::Graphics::TriD qw();

Puste cudzysłowy „qw()” są rozpoznawane jako oznaczające „nic”. Możesz także określić
lista funkcji do zaimportowania w normalny sposób Perla.

Istnieje również interaktywna powłoka „perldl” lub „pdl2”, patrz perdl lub pdl2, aby uzyskać szczegółowe informacje.

Do Stwórz a nowa PDL zmienna
Oto kilka sposobów tworzenia zmiennej PDL:

$a = pdl [1..10]; # Tablica 1D
$a = pdl (1,2,3,4); # Podobnie
$a = pdl '[1 2 3 4]'; # Podobnie
$b = pdl [[1,2,3],[4,5,6]]; # Tablica 2D 3x2
$b = pdl '[1 2 3; 4 5 6]”; # Podobnie
$b = pdl q[1,2,3; 4,5,6]; # Podobnie
$b = pdl <
[1 2 3]
[4 5 6]
NOWOŚĆPDL
$c = pdl q[1 -2]; # 2-elementowy piddle zawierający 1 i -2
$c = pdl q[1 - 2]; # 2-elementowy piddle zawierający 1 i -2
$b = pdl 42 # Skalar 0-wymiarowy
$c = pdl $a; # Utwórz nową kopię

$d = bajt [1..10]; # Zobacz „Konwersja typów”
$e = zera(3,2,4); # Tablica 3x2x4 wypełniona zerami

$c = rfits $plik; # Przeczytaj plik FITS

@x = ( Pan(42), zera(3,2,4), rfits($plik) ); # To LISTA zmiennych PDL!

Opona pdl() funkcja służy do inicjacji zmiennej PDL ze skalara, listy, listy
odwołanie, inna zmienna PDL lub odpowiednio sformatowany ciąg znaków.

Ponadto wszystkie funkcje PDL automatycznie konwertują normalne skalary Perla na zmienne PDL
w locie.

(zobacz także sekcje „Konwersja typów” i „Wejście/wyjście” poniżej)

Arytmetyka (I boolean wyrażenia)
$a = $b + 2; $a++; $a = $b / $c; # Itd.

$c=kwadrat($a); $d = log10($b+100); # Itp

$e = $a>42; # Warunek wektorowy

$e = 42*($a>42) + $a*($a<=42); # Czapka z daszkiem

$b = $a->log10, chyba że jakikolwiek ($a <= 0); # unikaj błędów zmiennoprzecinkowych

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

$f = gdzie($a, $a > 10); # gdzie zwraca zbiór elementów dla
# który warunek jest prawdziwy

wydrukuj $a; # $a w kontekście ciągu znaków wypisuje go w formacie N-wymiarowym

(i inne operatory/funkcje Perla)

Kiedy używasz piddle'ów w wyrażeniach warunkowych (tj. konstrukcje "if", "chyba że" i "while")
dozwolone są tylko piddle zawierające dokładnie jeden element, np

$a = pdl (1,0,0,1);
print „jest ustawiony”, jeśli $a->wskaźnik(2);

Należy zauważyć, że operatory logiczne zwracają zazwyczaj piddle wieloelementowe. Dlatego też
poniższe zgłosi błąd

wydrukuj „jest w porządku”, jeśli $a > 3;

ponieważ „$a > 3” jest piddlem z 4 elementami. Zamiast tego użyj all lub any, aby sprawdzić, czy all lub którykolwiek z
elementy spełniają warunek:

wydrukuj „niektóre są > 3”, jeśli jakieś $a>3;
wydrukuj „nie można przyjąć logarytmu”, chyba że wszystkie $a>0;

Istnieje również wiele predefiniowanych funkcji, które są opisane na innych stronach podręcznika. Sprawdzać
PDL::Indeks.

Matrix Funkcje
„x” zostaje przejęty jako operator mnożenia macierzy. np. "$c = $ax $b";

perlDL jest głównym wierszem, a nie kolumną, więc w rzeczywistości jest to „c(i,j) = suma_k a(k,j) b(i,k)” -
ale po wydrukowaniu macierzy wyniki będą wyglądać dobrze. Pamiętaj tylko, że są to indeksy
wywrócony. np:

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

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

Uwaga: transponować() robi to, co mówi i jest wygodnym sposobem przekształcania wektorów wierszowych w
wektory kolumnowe.

W jaki sposób do napisać a prosty funkcjonować
podprodukt punktowy {
mój ($a,$b) = @_;
suma zwrotu($a*$b) ;
}
1;

Jeśli umieścisz plik dotproduct.pdl, zostanie on automatycznie załadowany, jeśli używasz PDL::AutoLoader (zobacz
poniżej).

Oczywiście ta funkcja jest już dostępna jako funkcja wewnętrzna, patrz PDL::Primitive.

Typ Konwersja
Domyślne dla pdl() jest podwójne. Konwersje to:

$a = float($b);
$c = długi($d); # „long” to zazwyczaj 4-bajtowa liczba całkowita
$d = bajt($a);

Również podwójnie(), krótki(), skrót(), indeks().

UWAGA: Funkcja indx() jest specjalnym typem liczby całkowitej, który
jest prawidłowym rozmiarem dla wartości indeksu PDL (rozmiar wymiaru,
indeks lub offest), który może być 32-bitowy (długi) lub
Ilość 64-bitowa (longlong) w zależności od tego, czy perl
jest zbudowany z obsługą wersji 32-bitowej lub 64-bitowej.

Procedury te automatycznie konwertują listy Perla, aby umożliwić wygodne stenogramy:

$a = bajt [[1..10],[1..10]]; # Utwórz tablicę bajtów 2D
$a = float [1..1000]; # Utwórz tablicę zmiennoprzecinkową 1D

itd.

Drukowanie
Automatycznie rozwija tablicę w formacie N-wymiarowym:

wydrukuj $a;

$b = "Odpowiedź brzmi = $a ";

sekcje
PDL ma bardzo potężne wielowymiarowe operatory krojenia i dzielenia; zobacz
PDL::Plasterki(3) strona podręcznika, aby uzyskać szczegółowe informacje; opiszemy tutaj najważniejsze.

PDL pokazuje dziedzictwo Perla/C w tym sensie, że tablice mają przesunięcie zerowe. Zatem obraz o wymiarach 100x100 ma
indeksy „0..99,0..99”. (Konwencja jest taka, że centrum piksela (0,0) znajduje się na współrzędnej
(0.0,0.0). Wszystkie funkcje graficzne PDL są zgodne z tą definicją i ukrywają urządzenie
przesunięcia, na przykład, biblioteki PGPLOT FORTRAN.

Zgodnie ze zwykłą konwencją współrzędne (0,0) są wyświetlane w lewym dolnym rogu, gdy
wyświetlanie obrazu. Pojawia się w lewym górnym rogu, gdy używasz „drukuj $a” itp.

Proste sekcje korzystają z rozszerzenia składni języka Perl, PDL::NiceSlice, które na to pozwala
określ podzakresy za pomocą modyfikatora metody zerowej do PDL:

$b = $a->($x1:$x2,$y1:$y2,($z1)); # Weź podsekcję

Tutaj $a jest zmienną trójwymiarową, a $b otrzymuje planarne wycięcie zdefiniowane przez
ogranicza $x1, $x2, $y1, $y2 w lokalizacji $z1. Nawias wokół $z1 powoduje, że
trywialny indeks należy pominąć - w przeciwnym razie $b byłby trójwymiarowy z trzecim
wymiar zamówienia 1.

Możesz umieścić wycinki PDL po obu stronach operatora przypisania elementowego „.=", np
Sun:

# Ustaw część $bigimage na wartości z $smallimage
$duży obraz->($xa:$xb,$ya:$yb) .= $mały obraz;

Trochę innych różności:

$c = nelem($a); # Liczba pikseli

$val = at($object, $x,$y,$z...) # Wartość piksela na pozycji, jako skalar Perla
$val = $obiekt->at($x,$y,$z...) # odpowiednik (składnia metody OK)

$b = xvals($a); # Wypełnij tablicę wartościami współrzędnych X (także yvals(), zvals(),
# osiowe wartości($x,$oś) i rvals() dla odległości promieniowej
# od centrum).

Wejście wyjście
Moduły „PDL::IO” implementują kilka przydatnych funkcji formatu IO. To byłoby za dużo
aby podać przykłady każdego z nich, ale ładny przegląd można znaleźć w PDL::IO. Oto próbka
niektóre z obsługiwanych formatów IO w języku PDL.

PDL::IO::Różne
Procedury Ascii, FITS i FIGARO/NDF IO.

PDL::IO::FastRaw
Korzystanie z nieprzetworzonych typów danych Twojej maszyny, nieprzenośne, ale oślepiająco szybkie IO
format. Obsługuje również mapowanie pamięci, aby oszczędzać pamięć i uzyskać większą prędkość.

PDL::IO::FlexRaw
Ogólne formaty danych surowych. Podobnie jak FastRaw, tylko lepiej.

PDL::IO::Przeglądarka
Przeglądarka Curses dla tablic.

PDL::IO::Pnm
Przenośna obsługa bitmap i pixmap.

PDL::IO::Zdj
Korzystanie z poprzedniego modułu i netpbm umożliwia łatwe pisanie GIF, JPEG
i cokolwiek za pomocą prostych poleceń.

Grafika
Filozofia stojąca za PerlDL polega na tym, aby działał z różnorodną istniejącą grafiką
bibliotek, ponieważ żaden pojedynczy pakiet nie zaspokoi wszystkich potrzeb i wszystkich ludzi, a to pozwala
do pracy z pakietami, które już znasz i lubisz. Oczywiście, że będzie ich trochę
pokrywają się pod względem funkcjonalności i wykazują pewien brak spójności i jednolitości. Jednak to pozwala
PDL, aby nadążać za szybko rozwijającą się dziedziną - najnowsze moduły PDL zapewniają interfejsy
do grafiki OpenGL i VRML!

PDL::Grafika::PGPLOT
PGPLOT udostępnia prostą bibliotekę do grafiki liniowej i wyświetlania obrazów.

Istnieje do tego prosty interfejs w wewnętrznym module PDL::Graphics::PGPLOT, który
procedury wywoływania w oddzielnie dostępnym module najwyższego poziomu PGPLOT.

PDL::Grafika::PLplot
PLplot udostępnia prostą bibliotekę do tworzenia grafiki z wieloma sterownikami wyjściowymi,
łącznie ze sterownikiem direct-to-piddle.

Moduł ten zapewnia funkcjonalność zarówno wysokiego, jak i niskiego poziomu zbudowaną na PLplot. The
Polecenia niskiego poziomu są w zasadzie bezpośrednimi powiązaniami z interfejsem C PLplot. Czytaj więcej
w PDL::Graphics::PLplot.

PDL::Grafika::IIS
Wielu astronomów lubi używać SAOimage i Ximtool (lub ich pochodnych/klonów). Te
to przydatne darmowe widżety do kontroli i wizualizacji obrazów. (Oni nie są
dostarczane z perlDL, ale można je łatwo uzyskać z ich oficjalnych stron internetowych
Internet.)

Pakiet PDL::Graphics::IIS umożliwia wyświetlanie obrazów w tych („IIS”
to nazwa starożytnego sprzętu do wyświetlania obrazu, którego protokoły obejmują te narzędzia
dostosować się do.)

PDL::Grafika::TriD
Zobacz PDL::Graphics::TriD, jest to zbiór procedur 3D dla OpenGL i (wkrótce)
VRML i inne formaty 3D, które umożliwiają tworzenie wykresów punktów, linii i powierzchni 3D z PDL.

Automatyczne ładowanie
Zobacz PDL::AutoLoader. W pewnym sensie pozwala to na automatyczne ładowanie funkcji na żądanie
znane użytkownikom MatLaba.

Można także pisać rozszerzenia PDL jako zwykłe moduły Perla.

PDL muszle
Skrypt Perla „pdl2” (lub „perldl”) zapewnia prosty interfejs wiersza poleceń dla języka PDL. Jeśli
zainstalowano najnowsze moduły Readlines/ReadKey. „pdl2” wykrywa to i włącza
przywoływanie i edytowanie wiersza poleceń. Szczegóły znajdziesz na stronie podręcznika.

na przykład:

% perldl
Powłoka perlDL v1.354
PDL jest objęty CAŁKOWICIE ŻADNĄ GWARANCJĄ. Szczegóły znajdziesz w pliku
„KOPIOWANIE” w dystrybucji PDL. To jest wolne oprogramowanie i Ty
Zachęcamy do jego redystrybucji pod pewnymi warunkami, zob
szczegóły w tym samym pliku.
Włączone funkcje ReadLines, NiceSlice, MultiLines
Czytanie PDL/default.perldlrc...
Znaleziono bazę danych dokumentów /home/pdl/dev/lib/perl5/site_perl/PDL/pdldoc.db
Aby uzyskać pomoc online, wpisz „pomoc”.
Wpisz „demo”, aby wyświetlić demonstracje online
Załadowano PDL v2.4.9_003 (obsługuje złe wartości)
pdl> $x = rfits 'm51.fits'
Odczytywanie danych OBRAZU...
BITPIX = rozmiar 32 = 147456 pikseli
Odczyt 589824 bajtów
BSKALA = && BZERO =

pdl> użyj PDL::Graphics::PGPLOT;
pdl> obraz $x
Wyświetlanie obrazu 384 x 384 od 40 do 761, przy użyciu 84 kolorów (16-99)...

Jeśli chcesz, możesz także uruchomić go z debugera Perla („perl -MPDL -d -e 1”).

Różne funkcje powłoki:

p Powłoka aliasuje „p” jako wygodną, ​​krótką formę „print”, np

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

Inicjalizacji
Pliki "~/.perldlrc" i "local.perldlrc" (w bieżącym katalogu) pochodzą z if
znaleziony. Dzięki temu użytkownik może mieć globalny i lokalny kod PDL do uruchomienia.

Pomoc
Wpisz „pomoc”! Można przeszukiwać dokumentację PDL i przeglądać dokumentację dowolnego
funkcja.

Ucieczka
Każda linia zaczynająca się od znaku „#” jest traktowana jako ucieczka powłoki. Ta postać
można skonfigurować, ustawiając zmienną Perla $PERLDL_ESCAPE. Mogłoby to np.
być ustawionym"~/.perldlrc".

Przeciążać operatorzy
Następujące wbudowane operatory i funkcje Perla zostały przeciążone do pracy w języku PDL
zmienne:

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

[Wszystkie funkcje jednoargumentowe (sin itp.) mogą być użyte w miejscu() - patrz „Pamięć” poniżej.]

Orientacja obiektowa i perlDL
Operacje PDL są dostępne jako funkcje i metody. W ten sposób można wyprowadzić nowe typy
obiekt do reprezentowania niestandardowych klas danych.

Używając przeciążenia, można sprawić, że operatory matematyczne będą robić, co chcesz, i PDL
ma kilka wbudowanych sztuczek, które pozwalają istniejącym funkcjom PDL działać bez zmian, nawet jeśli
podstawowa reprezentacja danych została znacznie zmieniona! Zobacz PDL::Obiekty

Pamięć zwyczaj i referencje
Zabawa z naprawdę ogromnymi tablicami danych może wymagać pewnej ostrożności. perlDL zapewnia wiele
funkcje umożliwiające wykonywanie operacji na dużych tablicach bez generowania dodatkowych kopii
chociaż wymaga to nieco więcej przemyślenia i uwagi ze strony programisty.

UWAGA: W niektórych większości systemów lepiej jest skonfigurować Perl (w opcjach kompilacji).
użyj systemowej funkcji „malloc()” zamiast wbudowanej w Perl. Dzieje się tak dlatego, że Perl
jeden jest zoptymalizowany pod kątem szybkości, a nie zużycia pamięci wirtualnej - może to skutkować
dwukrotna poprawa ilości pamięci, którą można wykorzystać. Malloc Perla
w wersji 5.004 i nowszych dostępnych jest wiele opcji kompilacji, których można użyć do dostrojenia pliku
zachowanie.

Prosta arytmetyka
Jeśli $a jest dużym obrazem (np. zajmującym 10 MB), wówczas polecenie

$a = $a + 1;

zjada kolejne 10 MB pamięci. Dzieje się tak, ponieważ wyrażenie „$a+1” tworzy plik a
tymczasowa kopia $a do przechowywania wyniku, następnie $a otrzymuje odniesienie do tego.
Następnie oryginalne $a zostaje zniszczone, więc nie ma stały marnowanie pamięci. Ale dalej
małej maszynie, wzrost zajmowanej pamięci może być znaczny. To jest
oczywiście zrobiono to w ten sposób, więc „$c=$a+1” działa zgodnie z oczekiwaniami.

Także jeśli ktoś powie:

$b = $a; # $b i $a wskazują teraz na te same dane
$a = $a + 1;

Wtedy $b i $a okazują się różne, jak można się naiwnie spodziewać, ponieważ nowe odniesienie
jest tworzony i przypisywany jest do niego $a.

Jednakże, jeśli $a pochłania ogromną ilość pamięci (np. wolumin 3D), utworzenie jego kopii może się nie udać
być dobrą rzeczą. W powyższym przykładzie można uniknąć tego obciążenia pamięci, mówiąc:

$a++;

Operacje „++,+=,--,-=" itd. wywołują specjalną wersję „lokalną”
podprogram arytmetyczny. Oznacza to, że nie jest potrzebna więcej pamięci – wadą jest to
że jeśli „$b=$a”, to $b również jest zwiększane. Aby wymusić jawne kopiowanie:

$b = pdl $a; # Prawdziwa kopia

lub alternatywnie, być może lepszy styl:

$b = $a->kopia;

Funkcje
Większość funkcji, np. "log()", zwraca wynik będący ich przekształceniem
argument. Stanowi to podstawę dobrej praktyki programowania. Jakkolwiek wiele może być operacji
wykonywane „na miejscu” i może to być wymagane, gdy używane są duże tablice i dostępna jest pamięć
premia. W takich okolicznościach operator w miejscu() jest zapewnione, co zapobiega
dodatkową kopię i umożliwia modyfikację argumentu. np:

$x = log($tablica); # Tablica $ bez zmian
log(inplace($bigarray) ); # $bigarray zmieniony na miejscu

OSTRZEŻENIA:

1. Obowiązują zwykłe zastrzeżenia dotyczące zduplikowanych referencji.

2. Oczywiście w przypadku użycia z pewnymi funkcjami, których nie można zastosować na miejscu (np
„convolve()”) mogą wystąpić nieoczekiwane efekty! Staramy się wskazać „inplace()”-safe
funkcje w dokumentacji.

3. Konwersje typów, takie jak „float()”, mogą powodować ukryte kopiowanie.

zapewnienie głupota
Jeśli napisałeś prostą funkcję i nie chcesz, aby wybuchła ci w twarz
podaj mu prostą liczbę, a nie zmienną PDL. Po prostu wywołaj funkcję topdl() drugim
żeby było bezpiecznie. np:

sub mojefiddle {moje $pdl = topdl(shift); $pdl->fiddle_foo(...); ... }

„topdl()” NIE wykonuje kopii, jeśli zostanie przekazana zmienna pdl - po prostu przepadnie -
co jest oczywiście pożądanym zachowaniem. Rutyna nie jest oczywiście konieczna w normalnym przypadku
funkcje zdefiniowane przez użytkownika, które nie dbają o elementy wewnętrzne.

Korzystaj z PDL::QuickStartp online, korzystając z usług onworks.net



Najnowsze programy online dla systemów Linux i Windows