NAME

decode - decode an array based on a key

SYNOPSIS

val0.decode(val1)

DESCRIPTION

The decode method is similar to the APL ⊥ operator. It can be used to convert a sequence of digits to an integer in an arbitrary base. It can be used to evaluate polynomials. And it can be used to convert, for example, hours/minutes/seconds to seconds in one step.

val0 can be a scalar or vector. val1 can be a vector or multi-dimensional array. Note that the number of rows of the array should match the length of val0. Note also that the first element of a val0 vector is ignored - it is just there for conformance checking.

In the scalar val0 form, a vector of powers of val0 is computed, with the same length as the val1 vector or with the same length as the number of rows of a val1 array. This power vector is then used to form a (+,*) inner product with the whole val1 vector or each column of a val1 array.

In the vector val0 form, the first element is dropped and a 1 is implicitly concatenated. The resulting vector is reversed, a multiplication accum is performed, and the result reversed again. The resulting vector is used to form a (+,*) inner product with the whole val1 vector or each column of a val1 array.

The decode method is conceptually the inverse of the encode method.

RETURN VALUE

The decoded value

ERRORS

ShapeCheck if val0 and val1 are not conformal for decode

EXAMPLE

    // Convert 1 2 3 to base 8
    8->decode([1,2,3])
123

    // Convert two sets of digits to base 10
    10->decode([[1,2,3],[4,5,6]].transpose())
123 456

    // Evaluate 2*x**4 - x + 3 at (x == 5)
    5.->decode([2,0,0,-1,3])
1248.

    // Convert days/hours/minutes/seconds to seconds
    [0,24,60,60].decode([3,4,5,6])
273906

    // 86400 seconds in a day
    [0,24,60,60].decode([1,0,0,0])
86400

    // Show how decode works (conceptually)
    // Basis is reversed reverse-accum
    [24,60,60,1].reverse().accum(`*).reverse()
86400 3600 60 1

    // Inner product of basis
    [86400,3600,60,1].inner(`+,`*,[3,4,5,6])
273906

SEE ALSO

encode accum inner