mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-09-16 11:23:14 +08:00
various minor fixes in Sparse module
This commit is contained in:
parent
169696a078
commit
e75bef9523
@ -127,6 +127,8 @@ class DynamicSparseMatrix
|
|||||||
|
|
||||||
/** Set the matrix to zero and reserve the memory for \a reserveSize nonzero coefficients. */
|
/** Set the matrix to zero and reserve the memory for \a reserveSize nonzero coefficients. */
|
||||||
inline void startFill(int reserveSize = 1000)
|
inline void startFill(int reserveSize = 1000)
|
||||||
|
{
|
||||||
|
if (outerSize()>0)
|
||||||
{
|
{
|
||||||
int reserveSizePerVector = std::max(reserveSize/outerSize(),4);
|
int reserveSizePerVector = std::max(reserveSize/outerSize(),4);
|
||||||
for (int j=0; j<outerSize(); ++j)
|
for (int j=0; j<outerSize(); ++j)
|
||||||
@ -135,6 +137,7 @@ class DynamicSparseMatrix
|
|||||||
m_data[j].reserve(reserveSizePerVector);
|
m_data[j].reserve(reserveSizePerVector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** inserts a nonzero coefficient at given coordinates \a row, \a col and returns its reference assuming that:
|
/** inserts a nonzero coefficient at given coordinates \a row, \a col and returns its reference assuming that:
|
||||||
* 1 - the coefficient does not exist yet
|
* 1 - the coefficient does not exist yet
|
||||||
@ -218,7 +221,7 @@ class DynamicSparseMatrix
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline DynamicSparseMatrix()
|
inline DynamicSparseMatrix()
|
||||||
: m_innerSize(0)
|
: m_innerSize(0), m_data(0)
|
||||||
{
|
{
|
||||||
ei_assert(innerSize()==0 && outerSize()==0);
|
ei_assert(innerSize()==0 && outerSize()==0);
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ struct ei_traits<SparseDiagonalProduct<Lhs, Rhs> > : ei_traits<SparseProduct<Lhs
|
|||||||
typedef typename ei_cleantype<Lhs>::type _Lhs;
|
typedef typename ei_cleantype<Lhs>::type _Lhs;
|
||||||
typedef typename ei_cleantype<Rhs>::type _Rhs;
|
typedef typename ei_cleantype<Rhs>::type _Rhs;
|
||||||
enum {
|
enum {
|
||||||
SparseFlags = ((int(_Lhs::Flags)&Diagonal)==Diagonal) ? _Rhs::Flags : _Lhs::Flags,
|
SparseFlags = ((int(_Lhs::Flags)&Diagonal)==Diagonal) ? int(_Rhs::Flags) : int(_Lhs::Flags),
|
||||||
Flags = SparseBit | (SparseFlags&RowMajorBit)
|
Flags = SparseBit | (SparseFlags&RowMajorBit)
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -138,7 +138,6 @@ class SparseMatrix
|
|||||||
*/
|
*/
|
||||||
inline void startFill(int reserveSize = 1000)
|
inline void startFill(int reserveSize = 1000)
|
||||||
{
|
{
|
||||||
// std::cerr << this << " startFill\n";
|
|
||||||
setZero();
|
setZero();
|
||||||
m_data.reserve(reserveSize);
|
m_data.reserve(reserveSize);
|
||||||
}
|
}
|
||||||
@ -161,6 +160,10 @@ class SparseMatrix
|
|||||||
}
|
}
|
||||||
m_outerIndex[outer+1] = m_outerIndex[outer];
|
m_outerIndex[outer+1] = m_outerIndex[outer];
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ei_assert(m_data.index(m_data.size()-1)<inner && "wrong sorted insertion");
|
||||||
|
}
|
||||||
assert(size_t(m_outerIndex[outer+1]) == m_data.size());
|
assert(size_t(m_outerIndex[outer+1]) == m_data.size());
|
||||||
int id = m_outerIndex[outer+1];
|
int id = m_outerIndex[outer+1];
|
||||||
++m_outerIndex[outer+1];
|
++m_outerIndex[outer+1];
|
||||||
@ -390,11 +393,11 @@ class SparseMatrix
|
|||||||
s << std::endl;
|
s << std::endl;
|
||||||
s << std::endl;
|
s << std::endl;
|
||||||
s << "Column pointers:\n";
|
s << "Column pointers:\n";
|
||||||
for (int i=0; i<m.cols(); ++i)
|
for (int i=0; i<m.outerSize(); ++i)
|
||||||
{
|
{
|
||||||
s << m.m_outerIndex[i] << " ";
|
s << m.m_outerIndex[i] << " ";
|
||||||
}
|
}
|
||||||
s << std::endl;
|
s << " $" << std::endl;
|
||||||
s << std::endl;
|
s << std::endl;
|
||||||
);
|
);
|
||||||
s << static_cast<const SparseMatrixBase<SparseMatrix>&>(m);
|
s << static_cast<const SparseMatrixBase<SparseMatrix>&>(m);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user