Как установить базовый индекс в матрице Ublas? - PullRequest
0 голосов
/ 20 января 2010

Я искал в Интернете, но не смог найти ответ. Как мне установить базовый индекс в матрице, чтобы индексы начинались со значений, отличных от нуля? например:

A(-3:1) // Matlab/fortran equivalent
A.reindex(-3); // boost multi-array equivalent

спасибо

Ответы [ 2 ]

0 голосов
/ 21 января 2010

Если вам действительно нужна эта функциональность, возможно, вы могли бы рассмотреть возможность создания подкласса матрицы и переопределения оператора (), чтобы поиграть с индексами для вас. Например:

using namespace boost::numeric::ublas;

template<typename T>
class Reindexable : public matrix<T>
{
public:
    Reindexable() : m_offset(0) {}

    void reindex(int offset) { m_offset = offset; }

    T& operator()(int i) { return matrix<T>::operator()(i + m_offset); }

    /* Probably more implementation needed here ... */

private:
    int m_offset;
}

В последнее время я программирую на VB.NET (да!) И на C #, так что я немного устала от синтаксиса C ++ и, возможно, допустила несколько ошибок в приведенном выше, но общая идея должна работать. Вы делите матрицу на подклассы, чтобы обеспечить операцию переиндексации и переопределить оператор скобок, чтобы он знал о новом смещении индекса. Конечно, в реальной реализации вам потребуются смещения для каждого измерения матрицы.

Кроме того, если у вас когда-либо есть ссылка или указатель на ваш Reindexable, а тип ссылки / указателя равен matrix<T>, то вы будете использовать старый оператор индекса, поэтому будьте осторожны!

0 голосов
/ 21 января 2010

Ваш поиск кажется правильным; похоже, такой функции нет.

...