#c #matrix-multiplication #blas
#c #матрица-умножение #blas
Вопрос:
Как я могу использовать Blas для умножения вещественной матрицы на комплексный вектор? Когда я использую такие функции, как ccsrgemv() Я получаю ошибки несоответствия типов?
error: argument of type "float *" is incompatible with parameter of type "std::complex<float> *"
Комментарии:
1. Для людей, голосующих за закрытие: это реальный вопрос.
Ответ №1:
Используйте два умножения матрицы на векторы (A * (x iy) = A * x i A * y). Точнее, рассматривайте ваш комплексный вектор как два запутанных вещественных вектора с шагом 2. BLAS позволяет вам это сделать.
ОБНОВЛЕНИЕ: на самом деле, я не заметил, что вы выполняли разреженные BLAS. Для dgemv
моего трюка работает, но для csrgemv
него нет. Боюсь, вам придется поддерживать действительную и мнимую части отдельно.
Комментарии:
1. Если бы мне нужно было умножить транспонирование сложного плотного вектора на плотную вещественную матрицу (q = c ^T * A), я бы использовал
sgemm()
/dgemm()
routine:call SGEMM('N', 'N', 2, N, N, 1.0, c, 2, A, N, 0.0, q, 2)
(в Fortran).