我在网上搜索过,但找不到答案。如何在矩阵中设置基本索引,以便索引从零以外的值开始?例如:
A(-3:1) // Matlab/fortran equivalent
A.reindex(-3); // boost multi-array equivalent
谢谢
您的搜索似乎是正确的;它似乎没有这样的功能。
如果你真的需要这个功能,也许你可以考虑对矩阵进行子类化并覆盖 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>
,那么您将使用旧的索引运算符,所以要小心!