Multiplying transposed matrices in mir

jmh530 john.michael.hall at gmail.com
Sun Apr 19 17:22:12 UTC 2020


On Sunday, 19 April 2020 at 17:07:36 UTC, p.shkadzko wrote:
> I'd like to calculate XX^T where X is some [m x n] matrix.
>
> // create a 3 x 3 matrix
> Slice!(double*, 2LU) a = [2.1, 1.0, 3.2, 4.5, 2.4, 3.3, 1.5, 0, 
> 2.1].sliced(3, 3);
> auto b = a * a.transposed; // error
>
> Looks like it is not possible due to "incompatible types for 
> (a) * (transposed(a)): Slice!(double*, 2LU, 
> cast(mir_slice_kind)2) and Slice!(double*, 2LU, 
> cast(mir_slice_kind)0)"
>
> I'd like to understand why and how should this operation be 
> performed in mir.
> Also, what does the last number "0" or "2" means in the type 
> definition "Slice!(double*, 2LU, cast(mir_slice_kind)0)"?

2 is Contiguous, 0 is Universal, 1 is Canonical. To this day, I 
don’t have the greatest understanding of the difference.

Try the mtimes function in lubeck.


More information about the Digitalmars-d-learn mailing list