Questo è il comando PDL::FAQp che può essere eseguito nel provider di hosting gratuito OnWorks utilizzando una delle nostre molteplici postazioni di lavoro online gratuite come Ubuntu Online, Fedora Online, emulatore online Windows o emulatore online MAC OS
PROGRAMMA:
NOME
PDL::FAQ - Domande frequenti su PDL
VERSIONE
Versione attuale delle FAQ: 1.004
DESCRIZIONE
Questa è la versione 1.004 delle FAQ PDL, una raccolta di domande frequenti su
PDL - il linguaggio dei dati Perl.
CHI SIAMO QUESTO DOCUMENTO
Q: 1.1 Dove a Find questo documento
Puoi trovare l'ultima versione di questo documento su
<http://pdl.perl.org/?docs=FAQ&title=Frequently%20Asked%20Domande> .
Q: 1.2 Come a contribuire a questo documento
Questa è una versione notevolmente rielaborata delle FAQ PDL. Come molti errori potrebbero avere
si sono insinuati e molti aggiornamenti potrebbero non essere stati inseriti. Sei esplicitamente incoraggiato a lasciare che
siamo a conoscenza di domande alle quali ritieni che si debba rispondere in questo documento ma attualmente
non lo sono.
Allo stesso modo, se ritieni che parti di questo documento non siano chiare, comunicalo al manutentore delle FAQ
a proposito. Dove una risposta specifica è presa per intero da qualcuno che pubblica la paternità
dovrebbe essere indicato, informa il manutentore delle FAQ se non lo è. Per informazioni più generali
un riconoscimento esplicito non è fatto nel testo, ma piuttosto c'è un elenco incompleto di
contributori alla fine di questo documento. Si prega di contattare il manutentore delle FAQ se lo ritieni
duro fatto da.
Invia i tuoi commenti, aggiunte, suggerimenti o correzioni alla mailing list PDL a
[email protected]. Vedi Q: 3.2 di seguito per istruzioni su come partecipare alla spedizione
elenchi.
GENERALE DOMANDE
Q: 2.1 Che is PDL ?
PDL sta per Perl Dati Lingua . Per dirlo con le parole di Karl Glazebrook,
promotore del progetto PDL:
Il concetto PDL è quello di dare a standard perl5 la capacità
per immagazzinare COMPATTAMENTE e manipolare VELOCEMENTE il grande
Set di dati N-dimensionali che sono il pane quotidiano
di calcolo scientifico. ad es. $a=$b+$c può aggiungere due
Immagini 2048x2048 in solo una frazione di secondo.
Fornisce tonnellate di funzionalità utili per l'analisi scientifica e numerica.
Per i lettori che hanno familiarità con altri pacchetti di valutazione dei dati scientifici può essere utile
aggiungiamo che PDL è per molti aspetti simile a IDL, MATLAB e pacchetti simili. Tuttavia, è
cerca di migliorare su una serie di questioni che sono state percepite (dagli autori di PDL) come
carenze di quei pacchetti esistenti.
Q: 2.2 Chi lavora supporta Pdl? Chi lavora sviluppa vero?
PDL è supportato dai suoi utenti. Il supporto informale generale per il PDL è fornito attraverso il
Mailing list PDL ([email protected] , vedi sotto).
Come estensione Perl (vedi Q: 2.5 sotto) è dedicata all'idea di libero e aperto
sviluppo proposto dalla comunità Perl. PDL è stato ed è attivamente sviluppato da a
gruppo di persone in tutto il mondo che coordinano le loro attività attraverso il
Mailing list di sviluppo PDL ([email protected] , vedere D: 3.2 di seguito). Se tu
vorrei unirmi agli sforzi in corso per migliorare il PDL, per favore unisciti a questa lista.
Q: 2.3 Perché ancora un altro Dati Lingua ?
In realtà ci sono diversi motivi e ognuno dovrebbe decidere da solo quali sono i
i più importanti:
· PDL è "software libero". Gli autori di PDL pensano che questo concetto ne abbia diversi
vantaggi: tutti hanno accesso ai sorgenti -> debugging migliore, facilmente adattabile
alle tue esigenze, estensibile per i tuoi scopi, ecc... Rispetto al commerciale
pacchetti come MATLAB e IDL questo è di notevole importanza per i lavoratori che
vuole fare un po' di lavoro a casa e non può permettersi il costo considerevole per acquistare una pubblicità
pacchetti per uso personale.
· PDL è basato su un linguaggio di scripting potente e ben progettato: Perl. In contrasto con
altri linguaggi di analisi dei dati scientifici/numerici è stato progettato utilizzando il
caratteristiche di una lingua collaudata invece di essere nata da zero.
La definizione delle strutture di controllo mentre le funzionalità sono state aggiunte durante lo sviluppo porta a
lingue che spesso appaiono goffe e mal pianificate per la maggior parte dei pacchetti esistenti con
portata simile a quella del PDL.
· Utilizzando Perl come base, un programmatore PDL ha tutte le potenti funzionalità di Perl a sua disposizione
mano, fin dall'inizio. Ciò include espressioni regolari, array associativi
(hash), interfacce ben progettate per il sistema operativo, la rete, ecc. Esperienza
ha dimostrato che anche nella programmazione prevalentemente a orientamento numerico è spesso estremamente
utile se hai un facile accesso a potenti semi-numerici o completamente non numerici
anche la funzionalità. Ad esempio, potresti voler offrire i risultati di a
calcolo complicato come un processo server per altri processi sulla rete, forse
accettando direttamente input da altri processi sulla rete. Usare Perl ed esistere
I pacchetti di estensione Perl cose come questo non sono affatto un problema (e tutto andrà bene
nel tuo "script PDL").
· Estensibilità e interoperabilità estremamente semplici poiché PDL è un'estensione Perl;
il supporto allo sviluppo per le estensioni Perl è parte integrante di Perl e ci sono
già numerose estensioni allo standard Perl liberamente disponibili in rete.
· Caratteristiche del linguaggio integrale di Perl (espressioni regolari, hash, moduli oggetto)
immensamente facilitato lo sviluppo e l'attuazione dei concetti chiave del PDL. Uno di
l'esempio più eclatante per questo punto è probabilmente PDL::PP (vedi Q: 6.16 sotto), a
generatore di codice/parser/pre-processore che genera funzioni PDL da concise
descrizioni.
· Nessuno dei linguaggi dati esistenti segue le regole del linguaggio Perl, che gli autori
crede fermamente in:
· TIMTOWTDI: C'è più di un modo per farlo. Le lingue minimaliste sono
interessante per gli informatici, ma per gli utenti un po' di ridondanza
rende le cose molto più facili da affrontare e consente stili di programmazione individuali -
proprio come le persone parlano in modi diversi. Per molte persone questo sarà senza dubbio un
motivo per evitare il PDL ;)
· Le cose semplici sono semplici, le cose complicate possibili: cose che si fanno spesso
dovrebbe essere facile da fare nella lingua, mentre le cose fatte raramente non dovrebbero essere troppo
ingombrante.
Tutte le lingue esistenti violano almeno una di queste regole.
· Come progetto per il futuro, il PDL dovrebbe essere in grado di utilizzare le funzionalità del super computer, ad es
capacità vettoriali/elaborazione parallela, accelerazione GPGPU. Questo sarà probabilmente
ottenuto facendo in modo che PDL::PP (vedi Q: 6.16) generi un codice appropriato su tale
architetture per sfruttare queste caratteristiche.
· [inserisci qui i tuoi 111 motivi preferiti personali...]
Q: 2.4 Che is PDL buono per ?
Nel caso non sapessi ancora quali sono le caratteristiche principali del PDL e cosa si potrebbe fare
con loro, ecco un elenco (necessariamente selettivo) di funzionalità chiave:
PDL è adatto per calcoli a matrice, gestione generale di dati multidimensionali,
elaborazione di immagini, calcolo scientifico generale, applicazioni numeriche. Supporta I/O
per molti formati di immagini e dati diffusi, 1D (grafici a linee), 2D (immagini) e 3D (volume
visualizzazione, grafici di superficie tramite OpenGL, ad esempio implementati utilizzando Mesa o video
scheda OpenGL driver), capacità di visualizzazione grafica e implementa molti numeri e
algoritmi semi-numerici.
Attraverso il potente preprocessore è anche facile interfacciare Perl al tuo C . preferito
routine, più avanti.
Q: 2.5 Che is , il veloce fra PDL che a Perl ?
PDL è un pacchetto di estensione Perl5. Come tale necessita di un'installazione Perl5 esistente (vedi
sotto) per correre. Inoltre, gran parte del PDL è scritto in Perl (+ alcune funzionalità di base che
si scrive in C). I programmi PDL sono (sintatticamente) solo script Perl che capita di usare
alcune delle funzionalità implementate dal pacchetto "PDL".
Q: 2.6 Che do I bisogno a eseguire il PDL on my macchina ?
Poiché PDL è solo un pacchetto Perl5, è necessaria prima di tutto un'installazione di Perl5 sul tuo
macchina. Al momento della stesura di questo documento, PDL richiede la versione 5.8 di perl o superiore. Maggiori informazioni
su dove e come ottenere un'installazione Perl si possono trovare nella home page di Perl
<http://www.perl.org> e in molti siti CPAN (se non sai cosa CPAN è, controlla il
risposta alla domanda successiva).
Per compilare PDL hai anche bisogno di un compilatore C funzionante, supporto per Xsubs e il pacchetto
Extutils::MakeMaker. Se non hai un compilatore potrebbe esserci una distribuzione binaria
disponibili, vedere "Distribuzioni binarie" di seguito.
Se puoi (o non puoi) far funzionare PDL su una nuova piattaforma (precedentemente non supportata), lo faremmo
piace sentirne parlare. Per favore, segnala il tuo successo/insuccesso alla mailing list PDL a
[email protected] . Faremo del nostro meglio per assistervi nel portare PDL su un nuovo sistema.
Q: 2.7 Dove do I ottenere vero?
PDL è disponibile come distribuzione sorgente nel Globale Perl Archivio Network NetPoulSafe (o
CPAN) e dalla pagina del progetto sourceforge.net su
. L'archivio CPAN contiene non solo il
Distribuzione PDL ma anche quasi tutto il resto che è correlato a Perl. CPAN è
rispecchiato da dozzine di siti in tutto il mondo. Il sito principale èhttp://www.cpan.org>,
e i siti CPAN locali (mirror) possono essere trovati lì. All'interno di CPAN trovi le ultime
versione rilasciata di PDL nella directory /modules/by-module/PDL/. La homepage di PDL è su
<http://pdl.perl.org> e l'ultima versione può essere scaricata anche da lì.
Q: 2.8 Che do I avere a pagare a ottenere Pdl?
Siamo lieti di poterti dare la migliore risposta possibile a una domanda come
questo: PDL è *software gratuito* e tutte le fonti sono disponibili pubblicamente. Ma ancora, ci sono
alcuni diritti d'autore da rispettare. Quindi, per favore, cerca di essere gentile come lo siamo noi (gli autori del PDL)
e cercare di rispettarli.
Oh, prima di pensare che sia *completamente* gratuito: devi investire del tempo per tirare il
distribuzione dalla rete, compilatela e installatela e (forse) leggete i manuali.
COME AIUTO/ALTRO INFORMAZIONI
Q: 3.1 Dove può I ottenere informazioni on Pdl?
La documentazione PDL completa è disponibile con la distribuzione PDL. Usa il comando
"perldoc PDL" per iniziare a conoscere PDL.
Il modo di gran lunga più semplice, tuttavia, per familiarizzare con PDL è utilizzare la guida in linea di PDL
dall'interno della shell PDL, "pdl2" Basta digitare "pdl2" al prompt del sistema. Una volta
sei all'interno della shell "pdl2" digita "help" . Utilizzo dei comandi "help" e "apropos"
all'interno della shell dovresti essere in grado di trovare il modo per aggirare la documentazione.
Ancora meglio, puoi provare immediatamente le tue conoscenze appena acquisite sul PDL emettendo
Comandi PDL/Perl direttamente dalla riga di comando. Per illustrare questo processo, ecco il
registrazione di una tipica sessione "pdl2" di un principiante PDL (l'output lungo è solo simbolico
riprodotto tra parentesi ( <... ...> ) ):
unix> pdl2
pdl> aiuto
< ... output di aiuto ... >
pdl> aiuto PDL::QuickStart
< ... pagina perldoc ... >
pdl> $a = pdl (1,5,7.3,1.0)
pdl> $b = sequenza float, 4, 4
pdl> aiuto interiore
< ... aiuto sulla funzione 'interiore' ... >
pdl> $c = interno $a, $b
pdl> p $c
[22.6 79.8 137 194.2]
Per ulteriori fonti di informazioni accessibili tramite Internet, vedere di seguito
domanda.
Q: 3.2 sia ci Altro PDL informazioni fonti on , il Internet?
Prima di tutto, per tutte le domande puramente relative a Perl ci sono tonnellate di fonti in rete.
I buoni punti per iniziare sonohttp://www.perl.com> ehttp://www.perl.org>.
È possibile accedere al sito principale del PDL puntando il browser Web suhttp://pdl.perl.org>.
Ha tonnellate di chicche per chiunque sia interessato al PDL:
· Distribuzioni PDL
· Documentazione in linea
· Puntatori ad un archivio HTML delle mailing list PDL
· Un elenco di piattaforme su cui PDL è stato testato con successo.
· Notizie su funzionalità aggiunte di recente, librerie trasferite, ecc.
· Nome degli attuali possessori di zucca per i diversi moduli PDL (se vuoi sapere
cosa significa che è meglio dare un'occhiata alle pagine web).
Se sei interessato al PDL in generale puoi iscriverti alla mailing list del PDL
[email protected]. Questo è un forum per discutere problemi di programmazione in PDL, segnalare bug,
chiedere assistenza per problemi relativi al PDL, ecc. Per iscriversi, compilare il modulo su
<http://mailman.jach.hawaii.edu/mailman/listinfo/perldl>.
Un archivio ricercabile e una versione ipertestuale del traffico in questo elenco (1997-2004) possono
essere trovato ahttp://www.xray.mpe.mpg.de/mailing-lists/perldl/> . Messaggi più recenti
(dal giugno 2005) può essere trovato suhttp://mailman.jach.hawaii.edu/mailman/listinfo/perldl>
.
Se sei interessato a tutti i dettagli tecnici dello sviluppo PDL in corso puoi
unisciti alla mailing list degli sviluppatori PDL [email protected] . Per iscriverti, compila
il formatohttp://mailman.jach.hawaii.edu/mailman/listinfo/pdl-porters>.
Un archivio ricercabile e una versione ipertestuale del traffico in questo elenco (1997-2004) possono
essere trovato ahttp://www.xray.mpe.mpg.de/mailing-lists/pdl-porters/> . Messaggi più recenti
(dal giugno 2005) può essere trovato su
<http://mailman.jach.hawaii.edu/mailman/listinfo/pdl-porters>.
Il cross-posting tra queste liste dovrebbe essere evitato a meno che non ci sia un molto buon motivo per
facendo questo.
Q: 3.3 Che is , il corrente versione of PDL ?
Al momento della stesura di questo documento (FAQ versione 1.004 del 16 settembre 2013) l'ultima versione stabile è 2.006.
L'ultima versione stabile dovrebbe essere sempre disponibile da un sito mirror CPAN vicino a te (vedi
Domanda 2.7 per info su dove ottenere PDL).
La versione più recente (possibilmente instabile) di PDL può essere ottenuta da Git
repository, vedere la domanda 4.10 e le versioni periodiche degli sviluppatori CPAN del codice Git lo faranno
essere effettuato a scopo di test e disponibilità più generale. L'attuale post-PDL-2.006
la versione per sviluppatori di PDL è disponibile come CHM/PDL-2.006_07.tar.gz .
Q: 3.4 I volere a contribuire a , il ulteriormente sviluppo of Pdl. Come può I AIUTO?
Due modi in cui potresti aiutare quasi immediatamente sono (1) partecipare ai tester CPAN per
PDL e relativi moduli, e (2) correzione di bozze e chiarimento della documentazione PDL in modo che
è più utilizzabile per gli utenti PDL, in particolare i nuovi utenti.
Per partecipare a CPAN Testers e contribuire ai rapporti di prova, la pagina
<http://wiki.cpantesters.org/wiki/QuickStart> ha le istruzioni per iniziare per entrambi
Utenti "CPAN" o "CPANPLUS".
Se hai in mente un certo progetto dovresti controllare se qualcun altro sta già lavorando
su di esso o se potresti beneficiare di moduli esistenti. Fallo pubblicando il tuo progetto pianificato
alla mailing list degli sviluppatori PDL all'indirizzo [email protected] . Guarda l'abbonamento
istruzioni nella domanda 3.2. Siamo sempre alla ricerca di persone per scrivere codice e/o
documentazione ;).
Q: 3.5 I think I avere essere trovato a insetto in , il corrente versione of Pdl. Che deve I fare?
Innanzitutto, assicurati che il bug/problema che hai riscontrato non sia già stato risolto
da qualche altra parte in questa FAQ. In secondo luogo, puoi controllare l'archivio ricercabile del PDL
mailing list per scoprire se questo bug è già stato discusso. Se ancora non l'hai fatto
trovato qualsiasi spiegazione a cui puoi inviare una segnalazione di bug [email protected] o attraverso
il collegamento Bugs è attivohttp://pdl.perl.org> . Vedi il BUG file nella distribuzione PDL per
quali informazioni includere. Se non sei sicuro, discussioni tramite la mailing list di perldl
può essere molto utile.
MONTAGGIO
Q: 4.1 I avere problemi installazione Pdl. Che deve I fare?
Prima assicurati di aver letto il file INSTALLARE nella distribuzione. Questo contiene un elenco
di problemi comuni che qui non è necessario ripetere.
Quindi, controlla il file perldl.conf per vedere se modificando le opzioni di configurazione in questo
file sarai in grado di creare con successo PDL. Alcuni moduli necessitano di ulteriori
software installato, fare riferimento al file DIPENDENZE per ulteriori dettagli. Assicurarsi
per modificare la posizione di questi pacchetti in perldl.conf se li hai in non standard
posizioni.
NB Specifico per shell Unix: se desideri salvare un perldl.conf modificato per il futuro
costruisce basta copiarlo come ~/.perldl.conf nella tua home directory dove verrà prelevato
automaticamente durante il processo di creazione del PDL.
Inoltre, verifica la presenza di un'altra versione preesistente di PDL sul sistema di compilazione. PDL multipli
installazioni nello stesso PERCORSO o @INC possono causare test sconcertanti o errori di compilazione.
Se ancora non riesci a farlo funzionare correttamente, invia una segnalazione di bug con dettagli
informazioni sui problemi che hai riscontrato alla mailing list di perldl (
[email protected] , vedi anche sopra). La risposta è spesso rapida.
Q: 4.2 sia ci configurazione file per PDL I avere a modificare?
La maggior parte degli utenti non dovrebbe dover modificare manualmente alcun file di configurazione. Tuttavia, in alcuni
casi in cui potresti dover fornire alcune informazioni su include
file/librerie o potresti voler disabilitare esplicitamente la creazione di alcuni PDL opzionali
moduli. Controlla i file INSTALLARE che a perldl.conf per i dettagli.
Se dovessi modificare manualmente perldl.conf e sei contento dei risultati che puoi mantenere
file utile per riferimento futuro. Mettilo dentro ~/.perldl.conf dove verrà ritirato
automaticamente o usa "perl Makefile.PL PDLCONF=your_file_name" la prossima volta che crei PDL.
Q: 4.3 Do I bisogno Altro Software per di successo operazione?
Per la funzionalità PDL di base non è necessario alcun software aggiuntivo. Tuttavia, alcuni di
i moduli PDL opzionali inclusi nella distribuzione (in particolare la maggior parte della grafica e alcuni I/O
moduli) richiedono l'installazione di alcune altre librerie/programmi. Controlla il file
DIPENDENZE nella distribuzione per dettagli e indicazioni su come ottenerli.
Q: 4.4 Come può I install PDL in a non standard posizione?
Per installare PDL in una posizione non standard, utilizzare l'opzione INSTALL_BASE in "perl
Makefile.PL" passaggio di configurazione. Ad esempio, "perl Makefile.PL INSTALL_BASE=/mydir/perl5"
configurerà PDL per l'installazione nell'albero radicato in "/mydir/perl5". Per ulteriori dettagli
vedere "Come faccio a mantenere la mia directory di moduli/librerie?" in perlfaq8 e sezioni successive.
Un'altra alternativa è usare local::lib per fare l'elenco pesante per il necessario
configurazione.
Q: 4.5 Come può I forza a completamente cavedano installazione?
Per garantire un'installazione completamente pulita di PDL, sarà necessario eliminare prima il
file e cartelle di installazione correnti. Queste saranno tutte le directory denominate "PDL" nel
Perl @INC percorso, file denominati "*Pdlpp*" in qualsiasi directory "Inline" e i programmi "pdl,
pdldoc, pdl2, perldl e pptemplate". Quindi compila e installa come al solito. Questo è
molto più facile da tenere sotto controllo se installi sempre "PDL" in una posizione non standard.
Vedi D: 4.4 sopra.
BINARIO DISTRIBUZIONI
Q: 4.5 Che binario distribuzioni sono a disposizione?
Informazioni sulle distribuzioni binarie di PDL possono essere trovate suhttp://pdl.perl.org> . In
attualmente ci sono distribuzioni binarie di PDL per Linux (RedHat e Debian), FreeBSD, Mac
OS X e Windows, anche se potrebbero non essere la versione più recente.
Se qualcuno è interessato a fornire distribuzioni binarie per altre architetture, questo
sarebbe molto gradito. Fatecelo sapere su [email protected] mailing list. Anche
controlla il gestore di pacchetti della tua distribuzione Linux poiché molti ora includono PDL. PPM per win32
sono disponibili anche versioni (sia a 32 bit che a 64 bit).
Q: 4.6 Le normative PDL eseguire il on linux? (E che cosa circa Pacchetti?)
Sì, PDL funziona su Linux e in effetti gran parte dello sviluppo è stato fatto sotto Linux.
Soprahttp://pdl.perl.org> puoi trovare collegamenti a pacchetti per alcuni dei principali
distribuzioni. Controlla anche il gestore di pacchetti della tua distribuzione (yum, apt, urpmi, ...) as
Il PDL è ormai ritrovato da molti di questi.
Q: 4.7 Le normative PDL eseguire il per Windows?
PDL si basa bene su Win32 utilizzando MinGW o compilatori Microsoft. Vedi il win32/INSTALLA filetto
nella distribuzione dei sorgenti PDL per i dettagli. Altri compilatori non sono stati testati: input
è benvenuto. Esiste anche una distribuzione di PDL tramite le ppm di ActiveState, sebbene
potrebbe non essere sempre l'ultima versione. PDL-2.006 si costruisce fuori dagli schemi su Strawberry
Perl e ActiveState Perl.
CVS, IDIOTA, E IN CORSO SVILUPPO
Q: 4.8 Può I ottenere PDL via CVS?
No. Lo sviluppo di PDL è stato condotto con un repository CVS da dicembre 1999 ad aprile 2009.
Nell'aprile 2009 il progetto è passato al sistema di controllo della versione Git (vedi
<http://git-scm.com>).
Q: 4.9 Come do I ottenere PDL via Idiota?
Supponiamo che tu abbia Git installato sul tuo sistema e desideri scaricare il codice sorgente del progetto
nella directory "PDL". Per ottenere l'accesso in sola lettura al repository, digita in
riga di comando
git clone git://git.code.sf.net/p/pdl/code codice-pdl
Per gli sviluppatori PDL ufficiali, per ottenere l'accesso in lettura/scrittura al tipo di repository su
riga di comando
git clone ssh://[email protected]/p/pdl/codice codice-pdl
Q: 4.10 I ha avuto a problema con , il Idiota versione, come do I dai un'occhiata if qualcuno ha presentata a
cerotto?
Il sistema Sourceforge contiene un gestore di patch che contiene patch che non sono ancora state
stata applicata alla distribuzione. È possibile accedervi tramite il menu Biglietti in PDL's
Pagina del progetto Sourceforgehttp://sourceforge.net/projects/pdl>.
Inoltre, se non sei iscritto alla mailing list, controlla l'archivio del
mailing list "pdl-porters" e "perldl". Vedere la domanda 3.2 per i dettagli.
Q: 4.11 I avere ottenuto sviluppatore accesso a Idiota, come do I caricare my i cambiamenti?
La prima cosa che dovresti fare è leggere la documentazione di Git e imparare le basi su
Idiota. Ci sono molte fonti disponibili online. Ma ecco le basi:
Prima di caricare le tue modifiche, salvale nel TUO repository
git add ...
commit git
o combina questi due con
git commit -a
Quindi inserisci tutte le modifiche apportate da altri
git pull origine
Testa il PDL prima di inviarlo al repository principale. Se il codice è rotto per te,
allora molto probabilmente è rotto per gli altri e non saranno felici di avere il loro recente PDL
fallire nel costruire! NOTA: git rende molto semplice mantenere un ramo di sviluppo separato.
[ Da definire, fornire informazioni su come].
Quindi aggiorna il repository condiviso (su SF.net) con le tue modifiche
git push origin master
PDL GERGO
Q: 5.1 Che is threading (è PDL a lettore di notizie) ?
Sfortunatamente, nel contesto del PDL il termine threading può avere due differenti (ma
relativi) significati:
· Quando menzionato nel INSTALLARE indicazioni e possibilmente durante il processo di costruzione che abbiamo
il consueto significato informatico di multi-threading in mente (utile principalmente su
macchine multiprocessore o cluster)
· Il threading PDL delle operazioni sui piddle (come menzionato nei documenti di indicizzazione) è il
iterazione di un'operazione di base su sotto-fette appropriate di piddles, ad esempio l'inner
il prodotto "inner $a, $b" di a (3) pdl $a e a (3,5,4) pdl $b risulta in un (5,4) piddle
dove ogni valore è il risultato di un prodotto interno della (3) pdl con una (3) sotto-fetta
del piddle (3,5,4). Per i dettagli, controlla PDL::Indicizzazione
Il threading PDL porta naturalmente a un codice potenzialmente parallelo che può fare uso di multi
threading su macchine/reti multiprocessore; lì hai la connessione tra il
due tipi di uso del termine.
Q: 5.2 Che is a piscio?
Ebbene, le variabili scalari PDL (che sono istanze di una particolare classe di oggetti Perl,
cioè cose benedette (vedi "perldoc perlobj" )) sono nel linguaggio comune PDL spesso chiamate
piselli (ad esempio, controllare gli archivi delle mailing list). Ehm, chiaro? In caso contrario, usa semplicemente
il termine pisciare quando fai riferimento a una variabile PDL (un'istanza di un oggetto PDL come potresti
ricordare) indipendentemente da quali dati effettivi contiene la variabile PDL.
TECNICO DOMANDE
Q: 6.1 Che is perldl? Che is pdl2?
A volte "perldl" ("pdl2") è usato come sinonimo di PDL. A rigor di termini, tuttavia, il
il nome "perldl" ("pdl2") è riservato alla piccola shell fornita con il PDL
distribuzione e dovrebbe essere utilizzato per la prototipazione interattiva di script PDL.
Per i dettagli controlla perldl o pdl2.
Q: 6.2 Come do I ottenere On-line Aiuto per Pdl?
Basta digitare "help" (scorciatoia = "?") al prompt della shell "pdl2" e procedere da lì.
Un altro comando utile è il comando "apropos" (scorciatoia = "???"). Prova anche la "demo"
comando nella shell "perldl" o "pdl2" se non conosci PDL.
MANIPOLAZIONE OF PIDDLE
Q: 6.3 I volere a accesso , il Terzo elemento of a pdl ma $un[2] non lavoro ?!
Vedi la risposta alla domanda successiva perché la normale sintassi dell'array Perl non funziona per i piddle.
Q: 6.4 Le docs dire piselli sono alcuni tipo of Vettore. Ma perché non , il Perl schieramento sintassi
lavoro con piselli poi ?
OK, in un certo senso hai ragione. I documenti dicono che i piddle possono essere pensati come array. Di più
in particolare, dice ( PDL::QuickStart ):
Trovo che quando si utilizza il linguaggio dati Perl sia molto utile
pensare alle variabili standard Perl @x come a "elenchi" di generici
"cose" e variabili PDL come $x come "matrici" che possono essere
contenuti in liste o hash.
Quindi, mentre i piddle possono essere pensati come una sorta di array multidimensionale, lo sono non è un
array nel senso di Perl. Piuttosto, dal punto di vista di Perl sono alcuni speciali
class (che è attualmente implementato come puntatore opaco ad alcune cose in memoria) e
quindi sono necessarie funzioni speciali (o "metodi" se si utilizza la versione OO) per accedere
singoli elementi o una serie di elementi. Le funzioni/metodi da verificare sono "at" /
"set" (vedi la sezione 'Sezioni' in PDL::QuickStart ) o la potente funzione "slice"
e amici (vedi PDL::Slices e PDL::Indexing e soprattutto PDL::NiceSlice ).
Infine, per confonderti completamente, puoi avere array Perl di piddle, ad esempio $spec[3] can
fare riferimento a un pdl che rappresenta, ad esempio, uno spettro, dove $spec[3] è il quarto elemento del
Elenco Perl (o array ;) @spec . Questo può creare confusione ma è molto utile!
Q: 6.5 Come do I concatenare piselli?
La maggior parte delle persone cercherà di formare nuovi piddles da vecchi piddles usando qualche variazione sul
tema: "$a = pdl([$b, 0, 2])", ma non funziona. Il modo per concatenare i piddle è
utilizzare la funzione "gatto" (vedi anche "aggiungi" e "colla"). Allo stesso modo puoi dividere i piddles
utilizzando il comando "cane".
Q: 6.6 A volte I am ottenere di queste strano sul risultato quando utilizzando a posto operazioni?
Questa domanda è correlata alla funzione "inplace". Dalla documentazione (vedi
PDL::Avvio rapido):
La maggior parte delle funzioni, ad esempio log(), restituisce un risultato che è a
trasformazione del loro ragionamento. Questo fa bene
pratica di programmazione. Tuttavia si possono fare molte operazioni
"sul posto" e questo potrebbe essere necessario quando sono presenti array di grandi dimensioni
l'uso e la memoria sono un premio. Per queste circostanze il
viene fornito l'operatore inplace() che impedisce la copia aggiuntiva
e consente di modificare l'argomento. per esempio:
$x = log($array); # $array inalterato
log(inplace($bigray)); # $bigarray cambiato sul posto
E anche dal doc!!:
Ovviamente se utilizzato con alcune funzioni che non possono essere
applicati in situ (ad es. convolve()) possono verificarsi effetti imprevisti
verificarsi!
Q: 6.7 Che is questo strano uso of , il stringa concatenazione operatore ".=" in PDL
script?
Vedi prossima domanda sull'assegnazione in PDL.
Q: 6.8 Perché sono ci Tutto diverso tipi of assegnazione in PDL ?
Ciò è causato dal fatto che attualmente l'operatore di assegnazione "=" consente solo
sovraccarico limitato. Per alcuni scopi del PDL si è rivelato necessario avere
maggiore controllo sul sovraccarico di un operatore di assegnazione. Pertanto, il PDL esamina il
operatore ".=" per alcuni tipi di assegnazioni.
Q: 6.9 Come do I set a set of valori in a piscio?
In Perl 5.6.7 e versioni successive questa assegnazione può essere eseguita utilizzando le subroutine lvalue:
pdl> $a = sequenza(5); p $ un
[0 1 2 3 4]
pdl> $a->slice('1:2') .= pdl([5,6])
pdl> p $a
[0 5 6 3 4]
vedere PDL::Lvalue per maggiori informazioni. PDL supporta anche una sintassi slice più simile a una matrice tramite il
PDL::Modulo NiceSlice:
pdl> $a(1:2) .= pdl([5,6])
pdl> p $a
[0 5 6 3 4]
Con versioni di Perl precedenti alla 5.6.7 or quando running per , il perl debugger questo deve
essere fatto usando una variabile temporanea:
pdl> $a = sequenza(5); p $ un
[0 1 2 3 4]
pdl> $tmp = $a->slice('1:2'); p$tmp;
[1 2]
pdl> $tmp .= pdl([5, 6]); # Nota .= !!
pdl> p $a
[0 5 6 3 4]
Questo può anche essere trasformato in un'espressione, che si vede spesso nel codice PDL:
pdl> ($tmp = $a->slice('1:2')) .= pdl([5,6])
pdl> p $a
[0 5 6 3 4]
Q: 6.10 Può I uso a pisciare in a condizionale espressione?
Sì, puoi, ma non nel modo in cui probabilmente hai provato prima. Non è possibile utilizzare a
piddle direttamente in un'espressione condizionale poiché di solito è mal definita. Anziché
PDL ha due funzioni molto utili: "qualsiasi" e "tutti". Usali per verificare se ce ne sono o tutti
elementi in un piddle soddisfa alcuni criteri:
pdl> $a=pdl ( 1, -2, 3);
pdl> print '$a ha almeno un elemento < 0' if (qualsiasi $a < 0);
$a ha almeno un elemento < 0
pdl> print '$a non è definita positiva' a meno che (tutti $a > 0);
$a non è definita positiva
Q: 6.11 logico Operatori che a piselli - "||" che a '&&' non lavoro!
È un problema comune che provi a creare un array di maschere o qualcosa di simile usando a
costruire come
$maschera = which($piddle > 1 && $piddle < 2); # non corretto
Si effettua non è un opera! Quello che stai cercando è il bit a bit operatori logici '|' e
'&' che funzionano elemento per elemento. Quindi è davvero molto semplice: non usare
operatori logici su piddle multi-elemento poiché in realtà non ha senso, invece
scrivi l'esempio come:
$maschera = which($piddle > 1 & $piddle < 2);
che funziona correttamente.
AVANZATE ARGOMENTI
Q: 6.12 Che is a nullo pdl ?
"null" è un token speciale per "empty piddle". Un pdl nullo può essere utilizzato per contrassegnare un PDL
funzione che dovrebbe creare un piddle opportunamente dimensionato e digitato. Nullo piddles può
essere utilizzato in luoghi in cui una funzione PDL si aspetta un produzione or temporaneo discussione. Uscita che a
temporaneo gli argomenti sono contrassegnati in firma di una funzione PDL con la "[o]" e
Qualificatori "[t]" (vedi la domanda successiva se non sai che cosa firma di una funzione PDL
è). Ad esempio, puoi invocare la funzione "sumover" come segue:
somma $a, $b=nullo;
che è equivalente a
$b = somma $a;
Se questo sembra ancora un po' oscuro, controlla PDL::Indexing e PDL::PP per i dettagli sulla chiamata
convenzioni, il firma che a threading (vedi anche sotto).
Q: 6.13 Che is , il firma of a PDL funzione ?
Le firma di una funzione è un concetto importante nel PDL. Molti (ma non tutti) PDL
la funzione ha a firma che specifica gli argomenti e il loro (minimo)
dimensionalità. Ad esempio, guarda la firma della funzione "massimo":
'un); [o] b;'
questo dice che "massimo" accetta due argomenti, il primo dei quali è (almeno) uno-
dimensionale mentre il secondo è zero dimensionale e an produzione argomento (segnalato da
il qualificatore "[o]"). Se la funzione viene chiamata con piddles di dimensione maggiore il
funzione sarà ripetutamente chiamata con fette di questi piddles di appropriato
dimensione (questo si chiama threading nel Pdl).
Per dettagli e ulteriori chiarimenti consultare PDL::Indicizzazione e PDL::PP .
Q: 6.14 Come può I sottoclasse (ereditare a partire dal) piselli?
La risposta breve è: leggi PDL::Oggetti (es. digita "help PDL::Oggetti" nel campo perl or
pdl2 conchiglia).
La risposta più lunga (estratta da PDL::Objects ): Poiché un oggetto PDL è un opaco
riferimento a una struttura C, non è possibile estendere la classe PDL ad esempio con dati aggiuntivi tramite
sottoclassi (come si potrebbe fare con un oggetto Perl basato su hash). Per aggirare questo problema
PDL ha il supporto integrato per estendere la classe PDL tramite il ha un relazione per benedetto
hash. Puoi ottenere il HA UN comportarsi come È UN semplicemente in quanto assegni l'oggetto PDL
all'attributo denominato "PDL" e ridefinire il metodo inizializzare(). Per esempio:
pacchetto FOO;
@FOO::ISA = qw(PDL);
subinizializzazione {
mia $classe = shift;
il mio $sé = {
creation_time => time(), # estensione necessaria :-)
PDL => PDL->null, # usato per memorizzare l'oggetto PDL
};
benedica $sé, $classe;
}
Per un altro esempio controlla lo script t/sottoclasse.t nella distribuzione PDL.
Q: 6.15 Che on terra is questo flusso di dati roba ?
Dataflow è un progetto sperimentale di cui non devi preoccuparti (è
non dovrebbe interferire con la tua normale programmazione). Tuttavia, se vuoi saperlo, fai un
guarda PDL::Dataflow . Ci sono applicazioni che trarranno vantaggio da questa funzione (e
è già al lavoro dietro le quinte).
Q: 6.16 Che is PDL::PP?
Risposta semplice: PDL::PP è sia un collante tra librerie esterne e PDL che un conciso
linguaggio per scrivere funzioni PDL.
Risposta leggermente più lunga: PDL::PP viene utilizzato per compilare definizioni molto concise in XSUB
routine implementate in C che possono essere richiamate facilmente da PDL e che automaticamente
supportare threading, flusso di dati e altre cose senza che tu debba preoccupartene.
Per ulteriori dettagli controllare PDL::PP e la sezione sottostante sulle estensioni del PDL.
Q: 6.17 Che accade quando I avere alcuni Riferimenti a , il stesso PDL oggetto in diverso
variabili (clonazione, eccetera?) ?
I piddle si comportano come riferimenti Perl sotto molti aspetti. Quindi quando dici
$a = pdl[0,1,2,3];
$b = $a;
quindi sia $b che $a puntano allo stesso oggetto, ad es. quindi dicendo
$b++;
*non* creerà una copia del piddle originale ma si limiterà a incrementare sul posto, di cui tu
puoi convincerti dicendo
stampa $a;
[1 2 3 4]
Questo non dovrebbe essere confuso con il flusso di dati che collega diversi oggetti *diversi* quindi
che le modifiche ai dati vengano propagate tra i piddle così collegati (sebbene, in determinate condizioni
circostanze, i piddle con flusso di dati possono condividere fisicamente gli stessi dati).
È importante tenere a mente la "natura di riferimento" dei piddles quando si passano i piddles
in sottoprogrammi. Se modifichi i piddle di input, modifichi l'argomento originale, non è un a
copia di esso. Questo è diverso da altri linguaggi di elaborazione di array, ma rende per
passaggio molto efficiente di piddles tra le subroutine. Se non vuoi modificare il
argomento originale ma piuttosto una sua copia creane una copia esplicitamente (anche questo esempio
dimostra come controllare correttamente la presenza di un esplicito richiesta di elaborazione in atto, assumendo
la tua routine può funzionare sul posto):
sotto la mia funzione {
mio $pdl = shift;
if ($pdl->is_inplace) {
$pdl->set_inplace(0)
} Else {
# modifica una copia per impostazione predefinita
$pdl = $pdl->copia
}
$pdl->set(0,0);
restituisce $pdl;
}
VARIE
Q: 6.18 Che I / O formati sono supportato by PDL ?
Le attuali versioni di PDL supportano già un certo numero di formati I/O differenti.
Tuttavia, non è sempre ovvio quale modulo implementa quale formato. Per aiutarti a trovare
il modulo giusto per il formato richiesto, ecco un breve elenco dell'elenco corrente di
Formati I/O e un suggerimento in quale modulo trovare l'implementazione:
· Il modulo FastRaw implementa un formato I/O veloce (binario) per PDL
· Il modulo FlexRaw implementa metodi generici per l'input e l'output di dati "grezzi"
matrici. In particolare, è progettato per leggere l'output da FORTRAN 77 UNFORMATTED
file e la funzione di "scrittura" C di basso livello, anche se i file sono compressi o
gzippato.
È possibile che la funzionalità FastRaw venga inclusa nel modulo FlexRaw
in qualche momento nel futuro.
· L'I/O FITS è implementato dalle funzioni "wfits"/"rfits" in PDL::IO::FITS .
· I/O di file ASCII in vari formati possono essere ottenuti utilizzando "rcols" e "rgrep"
funzioni, anche in PDL::IO::Misc .
· PDL::IO::Pic implementa un'interfaccia ai filtri NetPBM/PBM+ per leggere/scrivere diversi
formati di immagine popolari; è inoltre supportato l'output di sequenze di immagini come filmati MPEG,
GIF animate e un'ampia varietà di altri formati video.
· Su CPAN puoi trovare il modulo PDL::NetCDF che funziona con la corrente rilasciata
versione del PDL 2.006.
Per maggiori dettagli consultare l'elenco più dettagliato nella documentazione PDL::IO o il
documentazione per i singoli moduli.
Q: 6.19 Come può I pila a set of 2D array (immagini) ai miglioramenti a 3D piscio?
Supponendo che tutti gli array siano della stessa dimensione e in qualche formato riconosciuto da "rpic" (vedi
PDL::IO::Pic ) potresti dire:
usa PDL::IO::Pic;
@nomi = qw/nome1.tif .... nomeN.tif/; # alcuni nomi di file
$dummy = PDL->rpic($names[0]);
$cubo = PDL->zeroes($dummy->type,$dummy->dims,$#names+1); # fare pipì 3D
per (0..$#nomi) {
# questa è l'assegnazione della fetta
($tmp = $cubo->slice(":,:,($_)")) .= PDL->rpic($names[$_]);
}
or
$cube(:,:,($_)) .= PDL->rpic($nomi[$_]);
per l'assegnazione delle sezioni utilizzando la nuova sintassi PDL::NiceSlice e le assegnazioni Lvalue.
Il ciclo for legge le immagini reali in un piddle 2D temporaneo i cui valori sono quindi
assegnato (usando l'operatore sovraccaricato ".=") alle sezioni appropriate del piddle 3D
$cubo.
Q: 6.20 Dove sono test file per , il grafiche moduli?
Questa risposta si applica principalmente a PDL::Graphics::TriD (la grafica 3D indipendente dal dispositivo di PDL
modello) che è il più difficile da questo punto di vista. Trovi alcuni script di prova in
Demo/TriD nella distribuzione. Ci sono anche 3dtest.pl che a line3d.pl nel
Directory PDL/Esempio/TriD. Dopo aver creato PDL puoi fare:
perl -Mblib Esempio/TriD/3dtest.pl
perl -Mblib Esempio/TriD/line3d.pl
per provare i due programmi di test TriD. Esercitano solo una funzione TriD ciascuno ma la loro
la semplicità rende facile il debug, se necessario, con il debugger Perl, vedere perldbug.
I programmi nella directory Demo possono essere eseguiti più facilmente da "perldl" o "pdl2"
guscio interattivo:
perl -Mblib perldl o perl -Mblib Perldl2/pdl2
seguito da "demo 3d" o "demo 3d2" al prompt. "demo" da solo ti darà una lista
delle demo PDL disponibili.
È possibile eseguire manualmente gli script di test nella directory Demos/TriD passando a quello
directory e in esecuzione
perl -Mblib
dove "testfile" ; dovrebbe corrispondere al modello "test[3-9].p" e guardare i risultati. Un po 'di
i test dovrebbero far apparire una finestra in cui puoi controllare (twittare) gli oggetti 3D con il
topo. Prova a usare il pulsante 1 del mouse per trasformare gli oggetti nello spazio 3D, il pulsante 3 del mouse su
ingrandire e rimpicciolire e 'q' per avanzare alla fase successiva del test.
Q: 6.21 Che is TriD or PDL::TriD or PDL::Grafica::TriD?
Domande come questa dovrebbero essere un ricordo del passato con il sistema di aiuto in linea PDL in
luogo. Prova (dopo l'installazione):
un*x> pdl2
pdl> a proposito trid
Controlla l'output per i risultati promettenti e poi prova a cercarne alcuni, ad es
pdl> aiuto PDL::Grafica::TriD
Nota che il caso è importante con "help" ma non con "apropos" .
Q: 6.22 PGPLOT effettua non è un scrivere su PNG File.
Ci sono alcune fonti di problemi con i file PGPLOT e PNG. Innanzitutto, quando si compila il
pgplot, assicurati di decommentare le voci PNG nel lista.driver file. Quindi
durante l'esecuzione di 'make' probabilmente hai ricevuto un errore del tipo
C
Per risolvere questo problema, trova la riga nel 'makefile' che inizia con 'pndriv.o:' (è vicino al
parte inferiore). Cambia, ad esempio, ./png.h in /usr/include/png.h, se è lì che si trova l'intestazione
file sono (hai i pacchetti libpng e libz devel, vero?). Fallo per tutti
quattro voci su quella riga, quindi torna indietro ed esegui "make".
Secondo, se hai già installato il modulo PGPLOT Perl e PDL, probabilmente hai provato
per scrivere un file PNG e ho ricevuto un messaggio di errore fatale come:
C
Questo perché il modulo PGPLOT Perl non si collega automaticamente a png e z
biblioteche. Quindi, quando installi il modulo PGPLOT Perl (versione 2.19) da CPAN,
non "installa PGPLOT", ma semplicemente "ottieni PGPLOT". Quindi uscire da CPAN e manualmente
installa PGPLOT, chiamando così il makefile:
C/ Usr / lib>
supponendo che esistano file come /usr/lib/libpng.so.*, /usr/lib/libz.so.*. Quindi fa
lo standard "make;make test;make install;" sequenza. Ora puoi scrivere file png da
PDL!
ESTENSIONI OF PDL
Q: 7.1 I am cerca per a pacchetto a do XXX in Pdl. Dove deve I Dai un'occhiata per vero?
La prima tappa è ancora "perldl" o "pdl2" e la guida in linea o la documentazione PDL.
Ci sono già molte funzionalità in PDL di cui potresti non essere a conoscenza. Il
il modo più semplice per cercare funzionalità è usare il comando "apropos":
pdl> a proposito di 'integrale'
ceil Arrotonda a valori integrali in formato a virgola mobile
floor Arrotonda a valori integrali in formato a virgola mobile
intover Progetto tramite integrale a N-1 dimensioni
rint Arrotonda a valori integrali in formato a virgola mobile
Poiché il comando apropos non è un motore di ricerca sofisticato, assicurati di cercare su a
un paio di argomenti correlati e usa frasi brevi.
Tuttavia ci sono buone probabilità che ciò di cui hai bisogno non faccia parte della distribuzione PDL. Voi
sono quindi ben consigliato di controllarehttp://pdl.perl.org> dove c'è un elenco di pacchetti
utilizzando PDL. Se questo non risolve il tuo problema, chiedi alla mailing-list, se non altro
potresti ricevere assistenza che ti consentirà di interfacciare il tuo pacchetto con PDL da solo, vedi
anche la prossima domanda.
Q: 7.2 Può I accesso my C/FORTRAN biblioteca routine in Pdl?
Sì, puoi, infatti è molto semplice per molte semplici applicazioni. Quello che vuoi è il
Pre-processore PDL PP (PDL::PP ). Questo ti permetterà di creare un'interfaccia semplice per il tuo C
routine.
Le due funzioni che devi imparare (almeno prima) sono "pp_def" che definisce il
chiamando l'interfaccia alla funzione, specificando i parametri di input e output e contiene
il codice che si collega alla libreria esterna. L'altro comando è "pp_end" che finisce
le definizioni PP. Per i dettagli, vedere la pagina man di PDL::PP, ma abbiamo anche una versione funzionante
esempio qui.
doppio otto_sum(int n)
{
int i;
doppia somma, x;
somma = 0.0; x=0.0;
for (i=1; i<=n; i++) {
x++;
somma += x/((4.0*x*x-1.0)*(4.0*x*x-1.0));
}
restituire 1.0/somma;
}
Vi mostreremo qui un esempio di come interfacciate il codice C con il PDL. Questo è il primo
esempio e ti mostrerà come approssimare il numero 8...
Il codice C è mostrato sopra ed è una semplice funzione che restituisce un doppio e si aspetta un
intero - il numero di termini nella somma - come input. Questa funzione potrebbe essere definita in a
libreria o, come facciamo qui, come funzione in linea.
Rimanderemo la scrittura del Makefile a più tardi. Per prima cosa costruiremo il ".pd"
file. Questo è il file contenente il codice PDL::PP. Lo chiamiamo "eight.pd" .
#
# pp_def definisce una funzione PDL.
#
pp_addhdr (
'
doppio otto_sum(int n)
{
int i;
doppia somma, x;
somma = 0.0; x=0.0;
for (i=1; i<=n; i++) {
x++;
somma += x/((4.0*x*x-1.0)*(4.0*x*x-1.0));
}
restituire 1.0/somma;
}
');
pp_def (
'otto',
Pars => 'int a(); doppio [o]b();',
Codice => '$b()=otto_somma($a());'
);
# Assicurati sempre di completare le tue dichiarazioni PP con
# pp_fatto
pp_fatto();
Una particolarità del nostro esempio è che abbiamo incluso l'intero codice con "pp_addhdr"
invece di collegarlo. Questo è solo a scopo di esempio, in un tipico
applicazione utilizzerai "pp_addhdr" per includere i file di intestazione. Nota che l'argomento a
"pp_addhdr" è racchiuso tra virgolette.
Ciò che è più importante in questo esempio è comunque il comando "pp_def". Il primo argomento
a questo è il nome della nuova funzione otto , poi arriva un hash che la vera carne:
· Questo fornisce i parametri di ingresso (qui "a") ei parametri di uscita (qui "b"). Il
questi ultimi sono indicati dall'identificatore "[o]". Entrambi gli argomenti possono avere un tipo
specifica come mostrato qui.
È possibile specificare molte varianti e un'ulteriore flessibilità nell'interfaccia. Vedere
"perldoc PDL::PP" per i dettagli.
· Questa opzione contiene il codice da eseguire. Come puoi vedere questo è piuttosto
strano mix di C e Perl, ma essenzialmente è proprio come lo scriveresti in C, ma
le variabili che vengono passate da PDL sono trattate diversamente e vanno riferite
a con un '$' precedente.
Esistono anche delle semplici macro per passare puntatori ai dati e per ottenere i valori di
altre quantità Perl, vedere la pagina di manuale per ulteriori dettagli.
Infine nota la chiamata a "pp_done()" alla fine del file. Questo è necessario in tutti i PP
File.
OK. Quindi ora abbiamo un file con il codice che vorremmo usare in Perl tramite PDL. Per
per fare questo abbiamo bisogno di compilare la funzione, e per farlo abbiamo bisogno di un Makefile.
usa PDL::Core::Dev;
usa ExtUtils::MakeMaker;
PDL::Core::Dev->import();
$pacchetto = ["otto.pd",otto,PDL::otto];
%hash = pdlpp_stdargs($pacchetto);
WriteMakefile(%hash);
sub MY::postamble {pdlpp_postamble($pacchetto)};
Il codice sopra dovrebbe andare in un file chiamato Makefile.PL, che dovrebbe essere successivamente chiamato
nel modo standard Perl: "perl Makefile.PL" . Questo dovrebbe darti un Makefile e
l'esecuzione di "make" dovrebbe compilare il modulo per te e "make install" lo installerà per
te.
Q: 7.3 Come può I interfaccia pacchetto XXX in Pdl?
Questa domanda è strettamente collegata alla precedente, e come abbiamo detto lì, il PDL::PP
il preprocessore è il modo standard per interfacciare i pacchetti esterni con PDL. Più
il modo consueto di usare PDL::PP è scrivere una breve routine di interfaccia, vedere il perldoc di PDL::PP
pagina e la risposta alla domanda precedente per esempi.
Tuttavia è anche possibile interfacciare un pacchetto a PDL riscrivendo la propria funzione in
PDL::PP direttamente. Questo può essere conveniente in determinate situazioni, in particolare se hai
una routine che si aspetta una funzione come input e vorresti passare la funzione a Perl
funzione per comodità.
La pagina perldoc PDL::PP è la principale fonte di informazioni per scrivere estensioni PDL::PP,
ma è molto utile cercare file nella distribuzione di PDL come molti dei core
le funzioni sono scritte in PDL::PP. Cerca i file che finiscono in ".pd" che è generalmente
suffisso accettato per i file PDL::PP. Ma qui abbiamo anche un semplice esempio.
Il seguente esempio ti mostrerà come scrivere una semplice funzione che automaticamente
consente la filettatura. Per rendere questo conciso l'esempio è di una funzione quasi banale, ma
l'intenzione è quella di mostrare le basi della scrittura di un'interfaccia PDL::PP.
Scriveremo una semplice funzione che calcola il minimo, il massimo e la media di a
piscio. Sulla mia macchina la funzione risultante è 8 volte più veloce della funzione integrata
"stats" (ovviamente quest'ultimo calcola anche la mediana).
Entriamo subito. Ecco il codice (da un file chiamato "quickstats.pd" )
#
pp_def('statistiche rapide',
Pars => 'a(n); [o]media(); [o]max(); [o]min()',
Codice => '$GENERIC(a) curmax, curmin;
$GENERICO(a) tmp=0;
ciclo(n) %{
tmp += $a();
if (!n || $a() > curmax) { curmax = $a();}
if (!n || $a() < curmino) { curmino = $a();}
%}
$media() = tmp/$SIZE(n);
$max() = limite massimo;
$min() = cumino;
'
);
pp_fatto();
Quanto sopra potrebbe sembrare una miscela confusa di C e Perl, ma dietro il peculiare
la sintassi è un linguaggio molto potente. Prendiamolo riga per riga.
La prima riga dichiara che stiamo iniziando la definizione di una funzione PDL:PP chiamata
"statistiche rapide".
La seconda riga è molto importante in quanto specifica i parametri di input e output del
funzione. a(n) ci dice che c'è un parametro di input che chiameremo "a"
che dovrebbe essere un vettore di lunghezza n (anche le matrici, sia quadrate che
rettangolare verrebbe scritto rispettivamente come "a(n,n)" e "a(n,m)"). Per indicare che
qualcosa è un parametro di output che mettiamo "[o]" davanti ai loro nomi, quindi facendo riferimento indietro
al codice vediamo che avg, max e min sono tre parametri di output, che sono tutti
scalare (poiché non hanno una dimensione dimensionale indicata.
La terza riga inizia la definizione del codice che è essenzialmente C puro ma con un paio di
comode funzioni. $GENERIC è una funzione che restituisce il tipo C del suo argomento -
qui il parametro di input a. Quindi le prime due righe della sezione del codice sono variabili
dichiarazioni.
Il costrutto loop(n) è una funzione di convenienza che esegue un loop sulla dimensione chiamata n in
la sezione dei parametri All'interno di questo ciclo calcoliamo la somma cumulativa dell'input
vettore e tenere traccia dei valori massimo e minimo. Infine assegniamo il risultante
valori ai parametri di uscita.
Infine finiamo la nostra dichiarazione di funzione con "pp_done()" .
Per compilare la nostra nuova funzione dobbiamo creare un Makefile, che elencheremo semplicemente poiché
la sua creazione è discussa in una domanda precedente.
usa PDL::Core::Dev;
usa ExtUtils::MakeMaker;
PDL::Core::Dev->import();
$pacchetto = ["statistiche rapide.pd",statistiche rapide,PDL::statistiche rapide];
%hash = pdlpp_stdargs($pacchetto);
WriteMakefile(%hash);
sub MY::postamble {pdlpp_postamble($pacchetto)};
Un esempio Makefile.PL
La nostra nuova funzione statistica dovrebbe ora essere compilata usando il collaudato metodo Perl: "perl
Makefile.PL; fare" .
Dovresti sperimentare questa funzione, modificando i calcoli e l'input e l'output
parametri. Insieme alla pagina perldoc PDL::PP questo dovrebbe permetterti di
scrivere routine più avanzate direttamente in PDL::PP.
Usa PDL::FAQp online utilizzando i servizi onworks.net