2010-01-20 64 views
0

我已經搜索了網頁,但找不到答案。 如何在矩陣中設置基礎索引,使索引從非零值開始?例如:如何在ublas矩陣中設置基礎索引?

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

感謝

+0

它是boost :: numeric :: ublas :: matrix Anycorn 2010-01-20 18:25:38

回答

0

您的搜尋似乎是正確的;它似乎沒有這樣的功能。

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被編程(!ughh)和C#最近,所以我對我的C++的語法有點生疏,並可能做出上述一些錯誤,但總體思路應該起作用。您可以對矩陣進行子類化,以便您可以提供reindex操作並覆蓋括號操作符,以便它知道新的索引偏移量。當然,在實際實施中,您需要矩陣每個維度的偏移量。另外,如果你有參考或指針指向你的Reindexable,並且參考/指針的類型是matrix<T>,那麼你將使用舊的索引操作符,所以要小心!