我在网上搜索过但找不到答案。 如何在矩阵中设置基本索引,使索引从零以外的值开始?例如:
A(-3:1) // Matlab/fortran equivalent
A.reindex(-3); // boost multi-array equivalent
感谢
答案 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>
,那么您将使用旧的索引运算符,所以要小心!