複素数の配列a
と実数の配列b
(double型)の配列を扱っています。実数と複素数の配列の操作
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
Iは、2つの問題(runnable demo hereライブ)に遭遇:絶対値(または "弾性率")と、メモリ管理目的のために
が実数あり、それができなければなりません
std::valarray<double>
として保管してください。しかし、ここでは動作しません:エラーconversion from 'std::_Expr<std::_UnClos<std::_Abs, std::_ValArray, std::complex<double> >, std::complex<double> >' to non-scalar type 'std::valarray<double>' requested
があります。modulus
をstd::valarray<double>
として保存するには?複素数の配列として
b
によってa
を乗算し、結果を保存することが可能であるべきです。しかし、このエラーがあります:no match for 'operator*' (operand types are 'std::valarray<std::complex<double> >' and 'std::valarray<double>')
。 アレイの乗算を正しく行うにはどうすればいいですか?ここで
'std :: valarray'はC++の頂点ではありません。委員会はこれを批判したともいえます。 –
@BaummitAugen私は、aとbが配列である 'c = a * b'のような高水準の処理をしたいと思ったので、これを使用しました。私はnumpyでPythonで行います。何か? – Basj
私があなただったら、まともな線形代数ライブラリを探します。あなたのお気に入りの検索エンジンで簡単に検索すると、より良い選択肢が得られます。 (私は 'valarray'が正気だったらあなたのコードがうまくいくはずです)。 –