我已經搜索了網頁,但找不到答案。 如何在矩陣中設置基礎索引,使索引從非零值開始?例如:如何在ublas矩陣中設置基礎索引?
A(-3:1) // Matlab/fortran equivalent
A.reindex(-3); // boost multi-array equivalent
感謝
我已經搜索了網頁,但找不到答案。 如何在矩陣中設置基礎索引,使索引從非零值開始?例如:如何在ublas矩陣中設置基礎索引?
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被編程(!ughh)和C#最近,所以我對我的C++的語法有點生疏,並可能做出上述一些錯誤,但總體思路應該起作用。您可以對矩陣進行子類化,以便您可以提供reindex操作並覆蓋括號操作符,以便它知道新的索引偏移量。當然,在實際實施中,您需要矩陣每個維度的偏移量。另外,如果你有參考或指針指向你的Reindexable
,並且參考/指針的類型是matrix<T>
,那麼你將使用舊的索引操作符,所以要小心!
它是boost :: numeric :: ublas :: matrix –
Anycorn
2010-01-20 18:25:38