Index Expression Objects
- class pytaco.index_expression(num)
Creates an Index Expression.
This direct invocation is only used to convert python ints and floats to index expressions. In all other cases, index expression will be formed by accessing a tensor using
index_var
s and different operations on that access as seen in the Index Expression Functions section.Note that in general, actually performing computations using index expressions require users to specify an output tensor with the correct shape. Dimensions indexed by the same
index_var
must have the same shape. As a result, determining the output shape is easy once the expression has been written. See the examples section.- Parameters
- num: int, float
The scalar value to use to make an index expression.
Notes
Construction index expressions in this way can largely be ignored since taco will implicitly convert python scalars to index expressions.
Creating index expressions from 0 order tensors must be done by indexing the 0 order tensor with
None
. This tells taco that there are no dimensions to access.The
evaluate()
function allows users to represent index notation as a string using parenthesis instead of square brackets and not requiring that scalars be indexed withNone
. This function can infer the output dimension of the tensor given the input string but does not currently support all of the index expression functions available.Examples
>>> import pytaco as pt >>> pt.index_expression(3) IndexExpr(3)
Implicit conversion
>>> i, j = pt.get_index_vars(2) >>> t = pt.tensor([3,3]) >>> t[i,j] = 10 # All values set to 10 since 10 implied to be index expr
Scalar access
>>> s = pt.tensor(100) >>> scalar_expr = s[None] * t[i,j]
An example of determining the output shape using matrix multiply:
>>> a = pt.tensor([4, 2]) >>> b = pt.tensor([2, 10])
We can represent matrix multiply as
C[i, j] = A[i, k] * B[k, j]
. Since we have the representation of the computation and we know that dimensions indexed by the same index variable must have the same shape, we can construct C by letting its first dimension have sizeA.shape[0]
since both dimensions are indexed byi
and letting its second dimension have size B.shape[1] sincej
indexes both of those dimensions. This, we would contiue the above as follows:>>> c = pt.tensor([a.shape[0], b.shape[1]])
Then we could write >>> i, j, k = pt.get_index_vars(3) >>> c[i, j] = a[i, k] * b[k, j]
- Attributes
datatype
Returns the data type this expression will output after computation.