0

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

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

谢谢

4

2 回答 2

0

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

于 2010-01-20T22:31:07.407 回答
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++ 语法有点生疏,并且可能在上面犯了一些错误,但总体思路应该可行。您将矩阵子类化,以便您可以提供重新索引操作并覆盖括号运算符,以便它知道新的索引偏移量。当然,在实际实现中,您将需要矩阵的每个维度的偏移量。

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

于 2010-01-20T22:44:40.600 回答