Skip to main content

Vector

Functions over vectors are divided into:

  • Numerical vector functions operate on numerical vectors.
  • Sequence functions operate on vectors whose elements can be of arbitrary type and need not be numerical.
  • Vector aggregate functions operate on collections (bags) of vectors.

Notice that the select vector statement provides a powerful mechanism for constructing new vectors through queries in terms of functions.

Numerical vector functions

The following infix operators over numeric vectors v and w, matrices a and b, and numbers lambda are defined:

operationdescriptionimplemented as function
v + welement-wise additionplus
v .+ w-"-plus
lambda + wadd number to elementsplus
v + lambda-"-plus
v - welement-wise subtractionsminus
v .- w-"-minus
-vnegate elementsuminus
v - lambdasubtract number from elementsminus
lambda - wsubtract elements from numberminus
v * wscalar producttimes
a * bmatrix producttimes
v * bscalar productstimes
a * wscalar productstimes
v .* welement-wise multiplicationselemtimes
lambda * wmultiply elements with numbertimes
v * lambda-"-times
v ./ welement-wise divisionelemdiv
v / lambdadivide elements with numberdiv
lambda / wdivide number with elementsdiv
v .^ lambdaelement-wise exponentelempower

Examples

Vector addition:

Add vector elements:

[1,2,3]+[4,5,6];

[1,2,3].+[4,5,6]
Not connected

To run this code block you must be logged in and your studio instance must be started.

Number and vector addition:

5+[1,2,3];

[1,2,3]+5
Not connected

To run this code block you must be logged in and your studio instance must be started.

Add nested vector elements:

[[1],2,3]+[[4],5,6];

[[1],2,3].+[[4],5,6]
Not connected

To run this code block you must be logged in and your studio instance must be started.

Vector subtraction:

Subtract vector elements:

[1,2,3]-[4,5,6];

[1,2,3].-[4,5,6]
Not connected

To run this code block you must be logged in and your studio instance must be started.

Number and vector subtraction:

5-[1,2,3];

[1,2,3]-5
Not connected

To run this code block you must be logged in and your studio instance must be started.

Vector division:

Number and vector division:

[1,2,3]/2;

3/[1,2,3]
Not connected

To run this code block you must be logged in and your studio instance must be started.

Element division:

[1,2,3]./[4,5,6]
Not connected

To run this code block you must be logged in and your studio instance must be started.

Nested element division:

[[1],2,3]./[[4],5,6]
Not connected

To run this code block you must be logged in and your studio instance must be started.

Multiply vector elements:

Scalar product:

[1,2,3]*[4,5,6]
Not connected

To run this code block you must be logged in and your studio instance must be started.

Number and vector multiplication:

[1,2,3]*5;

5*[1,2,3]
Not connected

To run this code block you must be logged in and your studio instance must be started.

Element multiplication:

[1,2,3].*[4,5,6]
Not connected

To run this code block you must be logged in and your studio instance must be started.

Nested element multiplication:

[[1],2,3].*[[4],5,[6]]
Not connected

To run this code block you must be logged in and your studio instance must be started.

Raise each element to a given exponent:

[1,2,3] .^ 2
Not connected

To run this code block you must be logged in and your studio instance must be started.

Round each element in a vector of numbers to two decimals:

roundto([3.14159,2.71828],2)
Not connected

To run this code block you must be logged in and your studio instance must be started.

Compute the max value of vector elements:

max([1,2,3]);

max(["a","b","c"])
Not connected

To run this code block you must be logged in and your studio instance must be started.

Compute the min value of vector elements:

min([1,2,3]);

min(["a","b","c"])
Not connected

To run this code block you must be logged in and your studio instance must be started.

Transforming vectors

The function section(v,l,u), returns a splice of a vector v, e.g.:

section([1,2,3,4,5],2,4)
Not connected

To run this code block you must be logged in and your studio instance must be started.

The function skip(v,n) returns the part of vector v starting at position n+1, e.g.:

skip(["a","b","c"],2)
Not connected

To run this code block you must be logged in and your studio instance must be started.

The function permute(v,indl) permutes the elements of a vector, e.g.:

permute([1,2,3,4,5],[2,4])
Not connected

To run this code block you must be logged in and your studio instance must be started.

Matrices

The type Matrix is an alias for type Vector of Vector of Number.

Matrix multiplication is used when the function times (operator *) is applied on matrices. The shapes of a and b must match, e.g.:

[[1,2],[3,4],[5,6]] * [[7,8],[9,10]]
Not connected

To run this code block you must be logged in and your studio instance must be started.

The scalar product is computed when the function times (operator *) is applied on vectors and on combinations of vectors and matrices, e.g.two scalar multiplications:

[4,5,6] * [[1,2,3],[6,7,8]]
Not connected

To run this code block you must be logged in and your studio instance must be started.

The function transpose(m) trasposes the matrix m, e.g.:

transpose([[1,2,3],[6,7,8]])
Not connected

To run this code block you must be logged in and your studio instance must be started.

Vector aggregate functions

Dimension-wise aggregates over bags of vectors can be computed using the function aggv().

Example:

   aggv((select [i, i + 10]
from Integer i
where i in range(1, 10)), thefunction('mean'))
Not connected

To run this code block you must be logged in and your studio instance must be started.

note

Notice that the function mean() is overloaded and thefunction() has to be use to get the generic mean() function.

Each dimension in a bag of vector of number can be normalized using one of the normalization functions meansub(), zscore(), or maxmin():

   meansub(Bag of Vector of Number b) -> Bag of Vector of Number
zscore(Bag of Vector of Number b) -> Bag of Vector of Number
maxmin(Bag of Vector of Number b) -> Bag of Vector of Number

meansub() transforms each dimension to a N(0, s) distribution (assuming that the dimension was N(u, s) distributed) by subtracting the mean u of each dimension.

zscore() transforms each dimension to a N(0, 1) distribution by also dividing by the standard deviation of each dimension.

maxmin() transforms each dimension to be on the [0, 1] interval by applying the transformation (w - min) ./ (max - min) to each vector w in bag b where max and min are computed using aggv(b, #' max') and aggv(b, #'min') respectively.

Example:

   meansub((select [i, i/2 + 10]
from Integer i
where i in range(1, 5)))
Not connected

To run this code block you must be logged in and your studio instance must be started.

Functions

abs(Vector v)->Vector of Number

The absolute values in vector v


aggv(Bag of Vector bv,Function fn)->Vector of Number

Apply aggregate function fn on each position of the vectors in bv


argmax(Vector v)->Integer

Index of the first largest element in v


argmin(Vector v)->Integer

Index of the first smallest element in v


concat(Vector v,Vector w)->Vector

Concatenate vectors v and w


dim(Vector v)->Integer

Size of vector v


div(Number lambda,Vector w)->Vector of Number

Divide lambda with each element in vector w, lambda / w


div(Vector v,Number lambda)->Vector of Number

Divide elements in vector v with lambda, v / lambda


elemdiv(Vector v,Vector w)->Vector of Number

Divide elements in vector v with elements in w, v ./ w


elempower(Vector v,Number exp)->Vector of Number

Compute power(e,exp) for each element e in vector v, v .^ exp


elemtimes(Vector v,Vector w)->Vector of Number

Multiply vectrors v and w element by element, v .* w


euclid(Vector v,Vector w)->Real

Euclidean distance between vectors v and w


fft(Vector v)->Vector of Complex

Full FFT over a vector


geodist(Vector v,Vector w)->Real

The surface distance in meters between geographic position vectors [latitude, longitude], v and w


ifft(Vector v)->Vector of Real

Inverse full FFT


integer_vector(Vector of Real v)->Vector of Integer

irfft(Vector v)->Vector of Real

manhattan(Vector of Number v,Vector of Number w)->Number

Manhattan distance between vectors v and w


max(Vector v)->Object

The largest element in vector v


maxmin(Bag of Vector of Number b)->Vector of Number

Transform to [0, 1]: Subtract min, divide by (max - min)


maxnorm(Vector of Number v,Vector of Number w)->Real

Maxnorm distance between vectors v and w


mean(Vector v)->Real

Average of vector of numbers v


meansub(Bag of Vector of Number b)->Vector of Number

Transform to N(0, s): Subtract mean(v)


min(Vector v)->Object

The smallest element in vector v


minkowski(Vector of Number v,Vector of Number w,Number r)->Real

Minkowski distance of degree r between vectors v and w


minus(Vector v,Vector w)->Vector of Number r

Subtract elements in vectors v and w, v .- w


minus(Vector v,Number lambda)->Vector of Number

Subtract lambda from each element in vector v, v - lambda


minus(Number lambda,Vector w)->Vector of Number

Subtract lambda from each element in vector w, lambda - w


not_null(Vector v)->Boolean

Are all elements in vector v not null?


numvector(Vector x)->Vector of Number

Cast x to vector of numbers


ones(Number dim)->Vector of Integer

Construct vector of dim 1:s


permute(Vector v,Vector of Integer indl)->Vector

Reorder vector v on index positions in indl


plus(Vector v,Vector w)->Vector of Number r

Add elements in vectors v and w, v .+ w


plus(Number lambda,Vector w)->Vector of Number

Add lambda to each element in vector w, lambda + w


plus(Vector v,Number lambda)->Vector of Number r

Add lambda to each element in vector v, v + lambda


rfft(Vector v)->Vector of Real

RFFT over vectors of numbers


section(Vector v,Number l,Number u)->Vector r

The subvector of vector v starting at position p and ending at u


setf(Vector v,Integer i,Object o)->Boolean

skip(Vector v,Number n)->Vector

Skip first n elements in vector v


stdev(Vector v)->Real

Standard deviation of vector of numbers v


sum(Vector v)->Number

The sum of the numbers in vector v


times(Vector v,Vector w)->Number

Scalar product of vectors v and w, v * W


times(Vector v,Number lambda)->Vector of Number

Multiply elements in vector v with lambda, v * lambda


times(Number lambda,Vector w)->Vector of Number

Multiply lambda with elements in w, lambda * w


times(Vector of Number v,Matrix m)->Vector of Number

Vector-matrix multiplication, v * m


times(Matrix a,Matrix b)->Matrix _v1

Matrix multiplication, a * b


times(Matrix m,Vector of Number w)->Vector of Number

Matrix-vector multiplication, m * v


transpose(Matrix m)->Matrix _v1

Transpose matrix m


uminus(Vector v)->Vector of Number

Negate numbers in vector v, -v


vdiff(Vector v,Vector w)->Vector

Elements in vector v that are not in vector w


vectorize(Bag b)->Vector v

vmean(Bag of Vector of Number bv)->Vector of Number

Mean vector for a given bag of vectors bv


vref(Vector v,Number i)->Object

Value of element i in vector v, same as v[i]


whennull(Vector v,Object dflt)->Vector

Value 'dflt' for nulls in 'v'


whenzero(Vector v,Object dflt)->Vector

Value 'dflt' for zeros in 'v'


zeros(Number dim)->Vector of Integer

Construct vector of dim 0:s


zscore(Bag of Vector of Number b)->Bag of Vector of Number

Transform elements in the vectors in b into normal distributions centered around zero