Я преобразовываю код matlab в код C++ и пытаюсь найти функцию в Lapack, Blas или даже Atlas, которая выполняет ту же работу в функции Diag (k) в matlab? Какие-либо предложения ?Каков альтернативный метод для Diag (k) в C++?
0
A
ответ
0
static void create_diagonal_matrix(T* matrix,T* v,int size)
{
for(int i=0;i<size;i++)
{
for(int32_t j=0;j<size;j++)
{
if(i==j)
matrix[j*size+i]=v[i];
else
matrix[j*size+i]=0;
}
}
}
0
GSL, the Gnu Scientific Library имеет функцию gsl_matrix_diagonal (gsl_matrix * m)
. Это создает «векторный вид» в матрице, которая является более или менее вектором gsl, сглаженным по диагонали матрицы. Dunno, если вы любите GSL, но также включает поддержку BLAS. Я думаю, что это очень хорошая библиотека.
"' Diag (k) '"? Вы имеете в виду создание диагональной матрицы из вектора или извлечение диагонали любой матрицы в виде вектора? – leftaroundabout
... и ответ зависит от того, как вы представляете матрицы и вектор в C++. В частности, каков тип 'k'? В любом случае вам не нужен Blas или Lapack (ATLAS - это просто их реализация), поскольку все это простой цикл над индексом: 'for (i = 0; i
sly