我正在處理一組複數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
我遇到兩個問題(住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我之所以這樣做,是因爲我想能夠做像'c = a * b'這樣的高級事物,其中a和b是數組,就像我在Python中使用numpy所做的那樣...您認爲我應該使用別的東西? – Basj
如果我是你,我會尋找一個體面的線性代數庫。用你最喜歡的搜索引擎進行簡單的搜索會給你更好的選擇。 (我完全同意你的代碼應該可以工作,如果'valarray'是理智的。) –