如何在ublas矩阵中设置基本索引?

时间:2010-01-20 18:20:03

标签: c++ boost indexing ublas

我在网上搜索过但找不到答案。 如何在矩阵中设置基本索引,使索引从零以外的值开始?例如:

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

感谢

2 个答案:

答案 0 :(得分:0)

您的搜索似乎是正确的;似乎没有这样的功能。

答案 1 :(得分:0)

如果你真的需要这个功能,也许你可以考虑对矩阵进行子类化并覆盖operator()以便为你调整索引。例如:

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 ++语法有些生疏,可能在上面做了一些错误,但总体思路应该有效。您对矩阵进行子类化,以便您可以提供reindex操作并覆盖括号运算符,以便它知道新的索引偏移量。当然,在实际实现中,您需要对矩阵的每个维度进行偏移。

另外,如果您有Reindexable的引用或指针,并且引用/指针的类型是matrix<T>,那么您将使用旧的索引运算符,所以要小心!