5 Stimmen

PDL-Skalar in Perl-Skalar umwandeln

Ich habe eine Funktion, die Folgendes verwendet PDL . Der letzte Schritt ist ein Punktprodukt, so dass ein Skalar zurückgegeben wird. Wenn ich jedoch versuche, diesen Skalar zu drucken, ist er eindeutig immer noch ein Piddle und wird auf dem Bildschirm wie folgt ausgedruckt:

[
  [ 3 ]
]

Ich frage mich, wie ich es zurück zu den regulären Perl Skalar konvertieren kann, so dass es wie druckt:

3 

Noch wichtiger ist die Frage, was die Folge ist, wenn ich nicht konvertiere und dieses Piddle für weitere arithmetische Manipulationen in einem reinen Perl-Kontext (der keine PDL beinhaltet) verwende. Vielen Dank!

5voto

Borodin Punkte 124906

Verwenden Sie die sclr Methode, die eine PDL-Matrix mit einem einzigen Element und einer beliebigen Anzahl von Dimensionen in einen einfachen Perl-Skalar umwandelt

my $dotp = sclr($mata x $matb);

1voto

Ed. Punkte 1750

Zur Beantwortung der zweiten Frage ("Was ist die Konsequenz, wenn ich nicht konvertiere und diesen Piddle für weitere arithmetische Manipulationen in einem reinen Perl-Kontext (der keine PDL beinhaltet) verwende?

  • PDL-Entities ("ndarrays") haben eine überladene Arithmetik, so dass alle Perl-Skalare, die mit ihnen verwendet werden, promotet werden, und die Ergebnisse sind ebenfalls ndarrays. Für skalare (Einzelelement-) Ndarrays ist dies wahrscheinlich nicht wünschenswert, da PDL-Operationen einen Performance-Schlag haben, der es für ein einzelnes Element nicht wert ist
  • Das im Beispiel gezeigte ndarray hat ein Element, aber es ist 2-dimensional (1x1); um ein richtiges skalares ndarray zu sein, müsste man Folgendes tun $dotp->squeeze alle Dims der Länge 1 fallen zu lassen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X