Tensor values

Variables may have tensor values, and wires transfer these tensor values between variables or to inputs of operations. Two ways of getting tensor values into Minsky are via tensor-valued initial conditions (§4.4.3), or by importing a CSV file into a parameter (§4.4.5). Scalar operations are extended to operating elementwise over tensors, and a number of operations exist for operating on tensors (§4.2).

When two or more tensors are combined with a binary operation, such as addition or multiplication, they must have the same rank, but can have differing dimensions. To understand what happens when a given dimension is mismatched requires understanding the concept of an x-vector.

An x-vector is a vector of real values, strings or date/time values, and each dimension of a variable has an implicit or explicit x-vector attached to it. If no x-vector is explicitly provided, then implicitly it consists of the the values , where is the dimension size of axis of the tensor.

When two tensor values are combined (eg added) along an axis, the second tensor's value is interpolated according to the x-vector. Suppose the first tensor was a vector and had an x-vector (1,3) and the second tensor had an x-vector (0,2,3), then the resulting tensor will be . If the x-vector were date/time data, then the tensor values will be interpolated according to the actual time values. If the first tensor's x-vector value lies outside the second tensor's x-vector, then it doesn't result in a value being included in the output. The resultant x-vector's range of values is the intersection of input tensors' x-vector ranges.

If both tensor had string x-vectors, then the resultant tensor will only have values where both input tensors have the same string value in their x-vectors. In the above case, where the x-vectors were ('1','3') and ('0','2','3') the resulting tensor will be the scalar .

It goes without saying that the type of the x-vector for each axis must also match.