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.