Ich arbeite mit einem Array von komplexen Zahlen a
und ein Array von reellen Zahlen b
(als Doppel).Arbeiten mit Arrays von reellen Zahlen und komplexen Zahlen
typedef std::complex<double> Complex;
std::valarray<Complex> a(1024);
std::valarray<double> b(1024);
std::valarray<double> modulus = std::abs(a); // problem 1
std::valarray<Complex> modulus2 = std::abs(a); // this works but uses 2 times more memory :(
std::valarray<Complex> c = a * b; // problem 2
begegne mir zwei Probleme (live runnable demo here):
Für Speicherverwaltung Zweck als der absoluten Wert (oder "Modul") ist eine reelle Zahl, soll es möglich sein, Speichern Sie es als
std::valarray<double>
. Aber hier funktioniert es nicht: Es gibt einen Fehlerconversion from 'std::_Expr<std::_UnClos<std::_Abs, std::_ValArray, std::complex<double> >, std::complex<double> >' to non-scalar type 'std::valarray<double>' requested
. Wie wirdmodulus
alsstd::valarray<double>
gespeichert?Es sollte möglich sein,
a
durchb
zu multiplizieren und das Ergebnis als ein Array komplexer Zahlen zu speichern. Aber da ist dieser Fehler:no match for 'operator*' (operand types are 'std::valarray<std::complex<double> >' and 'std::valarray<double>')
. Wie wird diese Multiplikation von Arrays richtig gemacht?
'std :: valarray' ist nicht ganz der Höhepunkt von C++. Man könnte sogar sagen, das Komitee hat das vermasselt. –
@BaummitAugen Ich benutzte das, weil ich in der Lage sein wollte, Dinge wie 'c = a * b' zu tun, wo a und b Arrays sind, wie ich es in Python mit numpy machen würde ... Denkst du, ich sollte es benutzen etwas anderes? – Basj
Wenn ich du wäre, würde ich nach einer ordentlichen Bibliothek für lineare Algebra suchen. Einfache Suche mit Ihrer bevorzugten Suchmaschine wird Ihnen bessere Alternativen bieten. (Ich stimme voll und ganz zu, dass Ihr Code funktionieren sollte, wenn 'valarray' gesund war.) –