Do we need Mat, Vec, TMmat, Diag, Sym and other matrix types?

bachmeier no at spam.net
Tue Mar 13 21:04:28 UTC 2018


On Tuesday, 13 March 2018 at 12:09:04 UTC, jmh530 wrote:
> On Tuesday, 13 March 2018 at 10:39:29 UTC, 9il wrote:
>> On Tuesday, 13 March 2018 at 05:36:06 UTC, J-S Caux wrote:
>>>
>>> Your suggestion [4] that matrix[i] returns a Vec is perhaps 
>>> too inflexible. What one needs sometimes is to return a row, 
>>> or a column of a matrix, so a notation like matrix[i, ..] or 
>>> matrix[.., j] returning respectively a row or column would be 
>>> useful.
>>
>> auto row = matrix[i]; // or matrix[i, 0 .. $];
>> auto col = matrix[0 .. $, j];
>
> Some kind of improvement that replaces 0 .. $ with some shorter 
> syntax has been brought up in the past.
> https://github.com/libmir/mir-algorithm/issues/53

What I have settled on is Row(x,2), which returns a range that 
works with foreach. I tried x[_,2] to return Row(x,2) but didn't 
like reading it, so I went with x[_all,2] instead. Similarly for 
Col(x,2) and x[2,_all]. The exact form is bikeshedding and 
shouldn't make much difference. I use ByRow(x) and ByColumn(x) to 
iterate over the full matrix.

IME, if you try to mix row-order and column-order, or 0-based 
indexing and 1-based indexing, it's too complicated to write 
correct code that interacts with other libraries. I think you 
need to choose one and go with it.


More information about the Digitalmars-d mailing list