Esempio n. 1
0
TSparseVec operator * (const TSparseVec &v, const TSparseMat &m)			// v * m
{
	Assert(v.Elts() == m.Rows(), "(Mat::v*m) vector/matrix sizes don't match");
	
	TMSparseVec	temp(m.Cols());
	TSparseVec	result(m.Cols());
	Int			i;
	TSVIter 	j(v);
	TMSVIter	k;
	
	temp = vl_zero;	
	
	// v * M = v[0] * m[0] + v[1] * m[1] + ...
	
	for (i = 0; i < m.Rows(); i++) 
	{		
		j.Inc(i);
		if (j.Exists(i))
			temp += m[i] * j.Data();
	}
	
	result.SetNumElts(temp.Elts());
	result.Begin();
		
	for (k.Begin(temp.Elts()); !k.AtEnd(); k.Inc())
		result.AddNZElt(k.Index(), k.Data());

	result.End();

	return(result);
}
Esempio n. 2
0
TSparseMat operator / (const TSparseMat &m, TMReal s)
{
	Int		i;
	TSparseMat	result(m.Rows(), m.Cols());
	
	for (i = 0; i < m.Rows(); i++) 
		result[i] = m[i] / s;
	
	return(result);
}
Esempio n. 3
0
TSparseMat operator - (const TSparseMat &m)
{
	TSparseMat	result(m.Rows(), m.Cols());
	Int		i;
	
	for (i = 0; i < m.Rows(); i++) 
		result[i] = -m[i];
	
	return(result);
}
Esempio n. 4
0
TMVec operator * (const TSparseMat &m, const TMVec &v)
{
	Assert(m.Cols() == v.Elts(), "(SparseMat::*v) matrix and vector sizes don't match");
	
	Int			i;
	TMVec		result(m.Rows());
	
	for (i = 0; i < m.Rows(); i++) 
		result[i] = dot(m[i], v);
	
	return(result);
}
Esempio n. 5
0
TSparseMat operator * (const TSparseMat &m, const TSparseMat &n)
{
	Assert(m.Cols() == n.Rows(), "(SparseMat::*m) matrix cols don't match");	
	
	TSparseMat	result(m.Rows(), n.Cols());
	Int		i;
	
	for (i = 0; i < m.Rows(); i++) 
		result[i] = m[i] * n;
	
	return(result);
}
Esempio n. 6
0
TSparseMat operator - (const TSparseMat &m, const TSparseMat &n)
{
	Assert(n.Rows() == m.Rows(), "(SparseMat::-) matrix rows don't match");	
	
	TSparseMat	result(m.Rows(), m.Cols());
	Int		i;
	
	for (i = 0; i < m.Rows(); i++) 
		result[i] = m[i] - n[i];
	
	return(result);
}
Esempio n. 7
0
Bool operator != (const TSparseMat &m, const TSparseMat &n)
{
	Assert(n.Rows() == m.Rows(), "(SparseMat::!=) matrix rows don't match");	
	
	Int		i;
	
	for (i = 0; i < m.Rows(); i++) 
		if (m[i] != n[i])
			return(1);

	return(0);
}
Esempio n. 8
0
TSparseVec operator * (const TSparseMat &m, const TSparseVec &v)
{
	Assert(m.Cols() == v.Elts(), "(SparseMat::m*v) matrix and vector sizes don't match");
	
	Int			i;
	TSparseVec	result(m.Rows());
	
	result.Begin();

	for (i = 0; i < m.Rows(); i++) 
		result.AddElt(i, dot(m[i], v));
	
	result.End();
		
	return(result);
}
Esempio n. 9
0
TSparseMat oprod(const TSparseVec &a, const TSparseVec &b)
// returns outerproduct of a and b:  a * trans(b)
{
	TSparseMat	result;
	TSVIter		i;
	
	result.SetSize(a.Elts(), b.Elts());
	result = vl_0;
		
	for (i.Begin(a); !i.AtEnd(); i.Inc())
	{
		result[i.Index()] = b;
		result[i.Index()] *= i.Data();
	}
	
	return(result);
}
Esempio n. 10
0
TMVec operator * (const TMVec &v, const TSparseMat &m)			// v * m
{
	Assert(v.Elts() == m.Rows(), "(Mat::v*m) vector/matrix sizes don't match");
	
	TMVec	 	result(m.Cols());
	Int			i, j;

	result = vl_zero;	

	// v * M = v[0] * m[0] + v[1] * m[1] + ...
	
	for (i = 0; i < m.Rows(); i++) 
		if (len(v[i]) > 0)
			for (j = 0; j < m[i].NumItems() - 1; j++)
				result[m[i][j].index] += v[i] * m[i][j].elt;
	
	return(result);
}
Esempio n. 11
0
TSparseMat oprods(const TVec &a, const TVec &b)
// returns outerproduct of a and b:  a * trans(b)
{
	TSparseMat	result;
	Int			i;

	result.SetSize(a.Elts(), b.Elts());
	
	for (i = 0; i < a.Elts(); i++)
		if (TSparseVec::IsNonZero(a[i]))
		{
			result[i] = b;
			result[i] *= a[i];
		}
		else
			result[i] = vl_0;

	return(result);
}
Esempio n. 12
0
TMSparseVec operator * (const TSparseVec &v, const TSparseMat &m)			// v * m
{
	Assert(v.Elts() == m.Rows(), "(Mat::v*m) vector/matrix sizes don't match");
	
	TMSparseVec result(m.Cols());
	Int			i;
	TSVIter 	j(v);

	result = vl_zero;	
	
	// v * M = v[0] * m[0] + v[1] * m[1] + ...
	
	for (i = 0; i < m.Rows(); i++) 
	{		
		j.Inc(i);
		if (j.Exists(i))
			result += m[i] * j.Data();
	}
	
	return(result);
}
Esempio n. 13
0
TSparseMat trans(const TSparseMat &m)
{
	Int			i, j;
	TSparseMat	result(m.Cols(), m.Rows());
		
	for (i = 0; i < result.Rows(); i++)
		result[i].Begin();

	for (i = 0; i < m.Rows(); i++)
	{
		// For row i of 'm', add its elements to the ends of the
		// appropriate row of 'result'.
	
		for (j = 0; j < m[i].NumItems() - 1; j++)
			result[m[i][j].index].AddNZElt(i, m[i][j].elt);
	}
	
	for (i = 0; i < result.Rows(); i++)
		result[i].End();
			
	return(result);
}
Esempio n. 14
0
TMReal trace(const TSparseMat &m)
{
	Int		i;
	TSVIter	j;
	TMReal 	result = vl_0;
	
	for (i = 0; i < m.Rows(); i++) 
	{
		j.Begin(m[i]);
		
		// Find element i of m[i], and if it exists,
		// add it to the result.
		
		if (j.IncTo(i))
			result += j.Data();
	}
	
	return(result);
}