Применение Boost UBLAS blas-1 к матрицам - PullRequest
2 голосов
/ 26 августа 2011

Как применить blas уровня 1 к матрице boost :: numeric :: ublas?Например, я хочу вычислить максимальную запись или сумму всех записей.Использование norm_1 или norm_inf в матрице не дает ошибки компилятора, но возвращает (как мне кажется) произвольные результаты.Я использую Boost 1.42

Ответы [ 2 ]

3 голосов
/ 28 августа 2011

norm_inf на матрице вычисляет матричную норму , индуцированную нормой бесконечности в базовом векторном пространстве.Это максимальная абсолютная сумма строки матрицы.

Если вы посмотрите на пример hannes , то последняя строка матрицы (i = 99, j = 0 ...99) содержит:

9900, 9901, 9902, ... , 9999

Если вы суммируете эти записи, вы получите 994950, что в точности соответствует norm_inf.

1 голос
/ 26 августа 2011

Минимальный пример выглядит так:

    #include<iostream>
    #include<boost/numeric/ublas/matrix.hpp>
    using namespace boost::numeric::ublas;
    int main(){
            int l = 100;
            matrix<double> m(l,l);
            for (int i = 0; i < l; ++i) {
                    for (int j = 0; j < l; ++j) {
                            m(i,j)=i*l+j;
                    }
            }
            std::cout << norm_inf(m)<<std::endl;
            return 0;
    }

Это должно дать 99, но дает 994950.

Это однострочник, который хотя бы решает данную задачу:

    float infnorm = accumulate(m.data().begin(),m.data().end(),0,std::max<double>);
...