Vectors and matrices

Lars Kyllingstad public at kyllingen.NOSPAMnet
Thu Apr 16 00:12:33 PDT 2009


Robert Jacques wrote:
> On Wed, 15 Apr 2009 10:07:38 -0400, Lars Kyllingstad 
> <public at kyllingen.nospamnet> wrote:
> 
>> I am writing a D library based some of the stuff in SLATEC, and I've 
>> come to a point where I need to decide on a way to manipulate vectors 
>> and matrices. To that end, I have some ideas and questions I would 
>> like comments on from the community.
>>
>> Ideally, I want to restrict the user as little as possible, so I'm 
>> writing heavily templated code in which one can use both 
>> library-defined vector/matrix types and built-in arrays (both static 
>> and dynamic). My reasons for this are:
>>
>>     a) Different problems may benefit from different types. Sparse 
>> matrices, dense matrices, triangular matrices, etc. can all be 
>> represented differently based on efficiency and/or memory requirements.
>>
>>     b) I hope that, at some point, my library will be of such a 
>> quality that it may be useful to others, and in that event I will 
>> release it. Interoperability with other libraries is therefore a goal 
>> for me, and a part of this is to let the user choose other 
>> vector/matrix types than the ones provided by me.
>>
>>     c) Often, for reasons of both efficiency and simplicity, it is 
>> desirable to use arrays directly.
>>
>> My first question goes to those among you who do a lot of linear 
>> algebra in D: Do you think supporting both library  types and arrays 
>> is worth the trouble? Or should I just go with one and be done with it?
> 
> I'd say its worth the trouble.
> 
>> A user-defined matrix type would have opIndex(i,j) defined, and to 
>> retrieve elements one would write m[i,j]. However, the syntax for 
>> two-dimensional arrays is m[i][j], and this means I have to put a lot 
>> of static ifs around my code, in order to check the type every time I 
>> access a matrix. This leads me to my second question, which is a 
>> suggestion for a language change, so I expect a lot of resistance. :)
> 
> I consider m[i][j] to be a jagged array, which is logically different 
> from matrix types. (i.e. its not square, etc.)
> 
>> Would it be problematic to define m[i,j,...] to be equivalent to 
>> m[i][j][...] for built-in arrays, so that arrays and user-defined 
>> types could be used interchangeably?
> 
> Actually, I'd prefer actual dense arrays over syntactic sugar for jagged 
> arrays.

Me too, but that's a bigger language change. At least there ought to be 
a matrix type in the standard library.


>> (And, importantly, are there anyone but me who think they would 
>> benefit from this?)
>>
>>
>> -Lars
> 
> Good numerics and linear algebra is always appreciated. To that end 
> there's a nice performance speedup in storing machine/byte strides 
> instead of logical/element strides. (See: 
> http://dobbscodetalk.com/index.php?option=com_content&task=view&id=502&Itemid=52 
> Also, my lab maintains a vector/numerics/robotics package that might be 
> of interest https://trac.lcsr.jhu.edu/cisst)

Thanks for the tip!

-Lars



More information about the Digitalmars-d mailing list