[Numpy-discussion] Controlling NumPy __mul__ method or forcing it to use __rmul__ of the "other"
Ilhan Polat
ilhanpolat at gmail.com
Mon Jun 19 08:27:49 EDT 2017
I will assume some simple linear systems knowledge but the question can be
generalized to any operator that implements __mul__ and __rmul__ methods.
Motivation:
I am trying to implement a gain matrix, say 3x3 identity matrix, for time
being with a single input single output (SISO) system that I have
implemented as a class modeling a Transfer or a state space representation.
In the typical usecase, suppose you would like to create an n-many parallel
connections with the same LTI system sitting at each branch. MATLAB
implements this as an elementwise multiplication and returning a multi
input multi output(MIMO) system.
G = tf(1,[1,1]);
eye(3)*G
produces (manually compactified)
ans =
From input 1 to output...
[ 1 ]
[ ------ , 0 , 0 ]
[ s + 1 ]
[ 1 ]
[ 0 , ------ , 0 ]
[ s + 1 ]
[ 1 ]
[ 0 , 0 , ------ ]
[ s + 1 ]
Notice that the result type is of LTI system but, in our context, not a
NumPy array with "object" dtype.
In order to achieve a similar behavior, I would like to let the __rmul__ of
G take care of the multiplication. In fact, when I do G.__rmul__(np.eye(3))
I can control what the behavior should be and I receive the
exception/result I've put in. However the array never looks for this method
and carries out the default array __mul__ behavior.
The situation is similar if we go about it as left multiplication G*eye(3)
has no problems since this uses directly the __mul__ of G. Therefore we get
a different result depending on the direction of multiplication.
Is there anything I can do about this without forcing users subclassing or
just letting them know about this particular quirk in the documentation?
What I have in mind is to force the users to create static LTI objects and
then multiply and reject this possibility. But then I still need to stop
NumPy returning "object" dtyped array to be able to let the user know about
this.
Relevant links just in case
the library : https://github.com/ilayn/harold/
the issue discussion (monologue actually) :
https://github.com/ilayn/harold/issues/7
The question I've asked on SO (but with a rather offtopic answer):
https://stackoverflow.com/q/40694380/4950339
ilhan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20170619/58d75c11/attachment.html>
More information about the NumPy-Discussion
mailing list