Я работаю с массивом комплексных чисел a
и массивом действительных чисел b
(как двойной).
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
Я столкнулся с двумя проблемами (живая запускаемая демонстрация здесь):
В целях управления памятью, поскольку абсолютное значение (или "модуль") является действительным числом, должна быть возможность сохранить его как
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>
?Должна быть возможность умножить
a
наb
и сохранить результат в виде массива комплексных чисел. Но есть эта ошибка:no match for 'operator*' (operand types are 'std::valarray<std::complex<double> >' and 'std::valarray<double>')
. Как правильно выполнить это умножение массивов?
std::valarray
не совсем вершина С++. Можно даже сказать, что комитет облажался. - person Baum mit Augen   schedule 06.07.2016c = a * b
, где a и b - массивы, как я сделал бы в Python с numpy ... Как вы думаете, мне следует использовать что-то еще? - person Basj   schedule 06.07.2016valarray
был в здравом уме.) - person Baum mit Augen   schedule 06.07.2016valarray
в любом случае? - person Basj   schedule 06.07.2016valarray
тоже , так же, как вы сделали бы это сstd::vector
. - person Baum mit Augen   schedule 06.07.2016valarray
.std::abs
собирается выдатьvalarray
типа ввода, и этоcomplex
. Вы можете зациклить его самостоятельно, но вы также можете использоватьstd::vector
в этот момент. Редактировать: вы можете перегрузитьstd::abs
, но опять же, вы можете сделать это сvector
. - person user4581301   schedule 06.07.2016std::vector
, могу ли я по-прежнему делать такие вещи, какc = a * b
? - person Basj   schedule 06.07.2016std::vector
- это просто общий массив вещей, ни в коем случае не знающий математики. - person Baum mit Augen   schedule 06.07.2016