Matrix<T>.ToRowWiseArray,provide a better eiffciency code
public virtual T[] ToRowWiseArray()
{
var ret = new T[RowCount * ColumnCount];
//foreach (var row in RowEnumerator())
//{
// var rowIndex = row.Item1 * ColumnCount;
// foreach (var element in row.Item2.GetIndexedEnumerator())
// {
// ret[rowIndex + element.Item1] = element.Item2;
// }
//}
for (int i = 0; i < RowCount; i++)
{
for (int j = 0; j < ColumnCount; j++)
{
ret[i * ColumnCount + j] = At(i, j);
}
}
return ret;
}
and
public virtual T[] ToColumnWiseArray()
{
var ret = new T[RowCount * ColumnCount];
//foreach (var column in ColumnEnumerator())
//{
// var columnIndex = column.Item1 * RowCount;
// foreach (var element in column.Item2.GetIndexedEnumerator())
// {
// ret[columnIndex + element.Item1] = element.Item2;
// }
//}
for (int i = 0; i < RowCount; i++)
{
for (int j = 0; j < ColumnCount; j++)
{
ret[j*RowCount+i] = At(i, j);
}
}
return ret;
}
Comments: Fixed in mainline
public virtual T[] ToRowWiseArray()
{
var ret = new T[RowCount * ColumnCount];
//foreach (var row in RowEnumerator())
//{
// var rowIndex = row.Item1 * ColumnCount;
// foreach (var element in row.Item2.GetIndexedEnumerator())
// {
// ret[rowIndex + element.Item1] = element.Item2;
// }
//}
for (int i = 0; i < RowCount; i++)
{
for (int j = 0; j < ColumnCount; j++)
{
ret[i * ColumnCount + j] = At(i, j);
}
}
return ret;
}
and
public virtual T[] ToColumnWiseArray()
{
var ret = new T[RowCount * ColumnCount];
//foreach (var column in ColumnEnumerator())
//{
// var columnIndex = column.Item1 * RowCount;
// foreach (var element in column.Item2.GetIndexedEnumerator())
// {
// ret[columnIndex + element.Item1] = element.Item2;
// }
//}
for (int i = 0; i < RowCount; i++)
{
for (int j = 0; j < ColumnCount; j++)
{
ret[j*RowCount+i] = At(i, j);
}
}
return ret;
}
Comments: Fixed in mainline