Guides/Language FAQ/Matrix Product
Why doesn't "A * B" matrix multiply the two matrices A and B?
The problem is:
]A =: 2 3 $ 4 3 8 6 5 3 4 3 8 6 5 3 ]B =: 3 2 $ 5 4 9 6 4 2 5 4 9 6 4 2 A * B |length error | A *B
A J array is not the same thing as a matrix in mathematics. A mathematical matrix is a two-dimensional array that follows the rules of scalar multiplication and matrix multiplication and addition. A J array can have any number of dimensions, and is not restricted to matrix operations.
The length error above is caused because, in J, for A * B to work, the frame of one must be a prefix of the frame of another, see JDic:dictb. In particular, if A and B are both matrices, then * is applied cell by cell and the shapes must match.
J does have verbs that perform matrix operations: +/ . * for matrix multiply, %. for matrix inverse/matrix divide, -/ . * for determinant, and 128!:0 and 128!:1 for special matrix operations. To find the matrix product of A and B, use
A +/ . * B 79 50 87 60
Contributed by Richard Hill