[PYTHON MATRIX-SIG] casting and default types

James Hugunin jjh@mama-bear.lcs.mit.edu
Wed, 8 Nov 95 10:06:28 -0500

> What exactly do you mean by "coercion of ranks"?

I'm responsible for this poor phrase.  My initial matrix proposal had the  
phrase "dimension coercion" for the J-style rank concept (of which I was  
unaware at the time).

The issue in a nutshell is that everybody (I think) agrees that:

a = Matrix((1,2,3),(11,12,13))
b = Matrix(100,200,300)

a+1 = Matrix((2,3,4),(12,13,14))

One question is should a+b be an error, or should it be

a+b = Matrix((101,202,203),(111,212,313))

I believe that the second is correct, and this can be elegantly expressed  
by the concept of ranks.  I don't think there's much disagreement on this  

Now the question comes, what if I ask for inverse( Matrix(((1,2),(11,12)),  
((3,4),(13,14))) ).

Using the rank notions in J, the argument should be considered a 1-frame of  
2-cells.  The result should be a 1-frame containing the inverse of each of  
these 2-cells.

However, for a case like this one, the arguments in favor of treating this  
as an error (you can't take the inverse of a 3d matrix) seem worth  

My current solution to this is that my optimized ofuncs use the J-style  
rank system, but only work on operations with unbounded rank like +, *, etc.  
 This is as much an implementation issue as anything else.

Other functions on matrices, like inverse (or my favorite, fft) are  
completely free to implement a rank system, or not as they see fit.  So for  
the fft function, when given a matrix, it will return the fft of every  
1-cell.  The question is whether or not we should adopt such a system as a  
standard for matrix functions.  Under the current setup there would be no  
way to enforce such a standard.


MATRIX-SIG  - SIG on Matrix Math for Python

send messages to: matrix-sig@python.org
administrivia to: matrix-sig-request@python.org