This is the way I decided to add the `ndarray` to the tensor objects, a property with a setter. This violates sympy's rule of immutability, besides it does not get recorded in the object `args`. I'm not sure about this, the `ndarray` could be considered as optional additional information to attach to an instance, while not being part of the expression.

Otherwise, there could be an additional argument, for example `ndarray_hash`, which records the `ndarray` hash in order to mark the presence of the `ndarray` in equalities evaluation. In this case, the `property` approach is bad.

Last, create a whole SymPy object for an `ndarray`, so all data could be recorded in `args`, this requires more additional work.

@certik which of these three options do you suggest to go on?