Multik 0.3.0 Help

dot

Overview

The dot function computes the product of two arrays. The behavior depends on the operand dimensions:

Left operand

Right operand

Result

Operation

2D matrix

2D matrix

2D matrix

Standard matrix multiplication.

2D matrix

1D vector

1D vector

Matrix-vector multiplication.

1D vector

1D vector

Scalar T

Inner (scalar) product.

Signatures

Via mk.linalg

// Matrix × Matrix fun <T : Number> LinAlg.dot(a: MultiArray<T, D2>, b: MultiArray<T, D2>): NDArray<T, D2> fun <T : Complex> LinAlg.dot(a: MultiArray<T, D2>, b: MultiArray<T, D2>): NDArray<T, D2> // Matrix × Vector fun <T : Number> LinAlg.dot(a: MultiArray<T, D2>, b: MultiArray<T, D1>): NDArray<T, D1> fun <T : Complex> LinAlg.dot(a: MultiArray<T, D2>, b: MultiArray<T, D1>): NDArray<T, D1> // Vector × Vector (scalar product) fun <T : Number> LinAlg.dot(a: MultiArray<T, D1>, b: MultiArray<T, D1>): T fun <T : Complex> LinAlg.dot(a: MultiArray<T, D1>, b: MultiArray<T, D1>): T

Infix extension

infix fun <T : Number> MultiArray<T, D2>.dot(b: MultiArray<T, D2>): NDArray<T, D2> infix fun <T : Complex> MultiArray<T, D2>.dot(b: MultiArray<T, D2>): NDArray<T, D2> infix fun <T : Number> MultiArray<T, D2>.dot(b: MultiArray<T, D1>): NDArray<T, D1> infix fun <T : Complex> MultiArray<T, D2>.dot(b: MultiArray<T, D1>): NDArray<T, D1> infix fun <T : Number> MultiArray<T, D1>.dot(b: MultiArray<T, D1>): T infix fun <T : Complex> MultiArray<T, D1>.dot(b: MultiArray<T, D1>): T

Parameters

Parameter

Type

Description

a

MultiArray<T, D2> or MultiArray<T, D1>

Left operand.

b

MultiArray<T, D2> or MultiArray<T, D1>

Right operand.

Returns: NDArray<T, D2>, NDArray<T, D1>, or scalar T depending on operand dimensions.

Matrix × Matrix

val a = mk.ndarray(mk[mk[1, 2], mk[3, 4]]) val b = mk.ndarray(mk[mk[5, 6], mk[7, 8]]) val c = mk.linalg.dot(a, b) // [[19, 22], // [43, 50]] // Or using infix syntax: val d = a dot b

Matrix × Vector

val mat = mk.ndarray(mk[mk[1.0, 2.0], mk[3.0, 4.0]]) val vec = mk.ndarray(mk[10.0, 20.0]) val result = mk.linalg.dot(mat, vec) // [50.0, 110.0] // Infix: val result2 = mat dot vec // [50.0, 110.0]

Vector × Vector (scalar product)

val u = mk.ndarray(mk[1.0, 2.0, 3.0]) val v = mk.ndarray(mk[4.0, 5.0, 6.0]) val scalar = mk.linalg.dot(u, v) // 32.0 (1*4 + 2*5 + 3*6) // Infix: val scalar2 = u dot v // 32.0

Pitfalls

  • This is matrix multiplication, not element-wise multiplication. For element-wise *, see Arithmetic Operations.

  • For matrix-matrix: the number of columns in a must equal the number of rows in b.

  • For matrix-vector: the vector length must equal the number of columns in the matrix.

  • For vector-vector: both vectors must have the same length.

19 February 2026