Perl Data Language
Paradigm | Array |
---|---|
Utvecklare | Karl Glazebrook , Jarle Brinchmann, Tuomas Lukka och Christian Soeller |
Dök först upp | 1996 |
Stabil frisättning | |
OS | Cross-plattform |
Licens | GNU General Public License , Artistic License |
Hemsida | |
Influerad av | |
APL , IDL , Perl |
Perl Data Language (förkortat PDL ) är en uppsättning gratis programvaruarray -programtillägg till programmeringsspråket Perl . PDL utökar datastrukturerna som är inbyggda i Perl till att inkludera stora flerdimensionella arrayer och lägger till funktionalitet för att manipulera dessa arrayer som vektorobjekt. Den tillhandahåller också verktyg för bildbehandling , maskininlärning , datormodellering av fysiska system och grafisk plottning och presentation. Enkla operationer vektoriseras automatiskt över hela arrayer, och högre dimensionella operationer (som matrismultiplikation) stöds.
Språkdesign
PDL är ett vektoriserat array-programmeringsspråk : uttryckssyntaxen är en variant av standard matematisk vektornotation , så att användaren kan kombinera och arbeta på stora arrayer med enkla uttryck. I detta avseende följer PDL i APL-programmeringsspråkets fotspår, och det har jämförts med kommersiella språk som MATLAB och Interactive Data Language , och med andra fria språk som NumPy och Octave . Till skillnad från MATLAB och IDL tillåter PDL stor flexibilitet i indexering och vektorisering: till exempel, om en subrutin normalt fungerar på en 2-D- matrismatris , kommer att skicka en 3-D- datakub i allmänhet att göra att samma operation händer med varje 2-D-matris. D lager av kuben.
PDL lånar från Perl minst tre grundläggande typer av programstruktur: imperativ programmering , funktionell programmering och pipeline-programmeringsformer kan kombineras. Subrutiner kan laddas antingen via en inbyggd autoload- mekanism eller via den vanliga Perl-modulmekanismen.
Grafik
Trogen de limspråkiga rötterna i Perl, lånar PDL från flera olika moduler för grafik och plottning. NetPBM tillhandahåller I/O för bildfiler (även om FITS stöds inbyggt). Modulerna Gnuplot , PLplot , PGPLOT och Prima stöds för 2D-grafik och plottningstillämpningar, och Gnuplot och OpenGL stöds för 3D-plottning och rendering.
I/O
PDL tillhandahåller faciliteter för att läsa och skriva många öppna dataformat, inklusive JPEG , PNG , GIF , PPM , MPEG , FITS , NetCDF , GRIB , råa binära filer och avgränsade ASCII-tabeller. PDL-programmerare kan använda CPAN Perl I/O-biblioteken för att läsa och skriva data i hundratals standard- och nischfilformat.
Maskininlärning
PDL kan användas för maskininlärning . Den innehåller moduler som används för att utföra klassiska k-means klustring eller generella och generaliserade linjära modelleringsmetoder som ANOVA, linjär regression, PCA och logistisk regression. Exempel på PDL-användning för regressionsmodelleringsuppgifter inkluderar att utvärdera sambandet mellan utbildningsnivå och skillnader i anor för föräldrar, jämförelse av RNA-proteininteraktionsprofiler som behöver regressionsbaserad normalisering och analys av galaxspektra.
perldl
En installation av PDL kommer vanligtvis med ett interaktivt skal känt som perldl , som kan användas för att utföra enkla beräkningar utan att användaren behöver skapa en Perl-programfil. En typisk session av perldl skulle se ut ungefär så här:
0
perldl > $x = pdl [[ 1 , 2 ], [ 3 , 4 ]]; perldl > $y = pdl [[ 5 , 6 , 7 ],[ 8 , 9 , ]]; perldl > $z = $x x $y ; perldl > p $z ; [ [ 21 24 7 ] [ 47 54 21 ] ]
Kommandona som används i skalet är Perl-satser som kan användas i ett program med PDL-
modul inkluderad. x
är en överbelastad operator för matrismultiplikation , och p
i det sista kommandot är en genväg för utskrift
.
Genomförande
Kärnan i PDL skrivs i C . Det mesta av funktionaliteten är skriven i PP , ett PDL-specifikt metaspråk som hanterar vektorisering av enkla C-snuttar och kopplar dem till Perl-värdspråket via Perls XS -kompilator. Vissa moduler är skrivna i Fortran , med ett C/PP-gränssnittslager. Många av de medföljande funktionerna är skrivna i själva PDL. PP är tillgängligt för användaren att skriva C-språktillägg till PDL. Det finns också en Inline-modul (Inline::Pdlpp) som gör att PP-funktionsdefinitioner kan infogas direkt i ett Perl-skript; den relevanta koden kompileras på låg nivå och görs tillgänglig som en Perl-subrutin.
PDL API använder den grundläggande Perl 5 objektorienterade funktionaliteten: PDL definierar en ny typ av Perl skalärt objekt ( eponymt kallat "PDL" eller "ndarray") som fungerar som en Perl skalär, men som innehåller en konventionell typmatris av numeriska eller teckenvärden. Alla standard Perl-operatorer är överbelastade så att de kan användas på PDL-objekt transparent, och PDL kan blandas och matchas med normala Perl-skalärer. Flera hundra objektmetoder för att arbeta på PDL:er tillhandahålls av kärnmodulerna.