Real inner-product in python

Chad Netzer cnetzer at mail.arc.nasa.gov
Tue Jan 21 22:46:18 EST 2003


On Saturday 18 January 2003 22:56, Nadav Horesh wrote:
> Is there a package/routine that implements inner-product for arrays
> with rank>2?

> I read in an old thread (1995) a thought to implement an APL-like dot
> (.) operator  in Numeric package (add.inner.subtract <=> +.-) does
> anyone know about an implementation of  the idea?

Numeric does have dot(), and it may do exactly what you want.  Here's 
an example with 1, 2, and 3 dimensional arrays:

$ python
Python 2.2.2 (#1, Jan  3 2003, 12:42:27) 
>>> import Numeric as Num

>>> a = Num.array( [1,2,3] )
>>> b = Num.array( [a, a+3,a+6])
>>> c = Num.array( [b, b+10, b+20] )

>>> Num.rank(a)    
1
>>> Num.rank(b)
2
>>> Num.rank(c)
3

>>> Num.dot(a,a)
14

>>> Num.dot(b,a)
array([14, 32, 50])

>>> Num.dot(a,b)
array([30, 36, 42])

>>> Num.dot(b,b)
array([[ 30,  36,  42],
       [ 66,  81,  96],
       [102, 126, 150]])

>>> Num.dot(c,a)
array([[ 14,  32,  50],
       [ 74,  92, 110],
       [134, 152, 170]])

>>> Num.dot(a,c)
array([[30, 36, 42],
       [51, 57, 63],
       [71, 77, 83]])

>>> Num.dot(c,b)
array([[[ 30,  36,  42],
        [ 66,  81,  96],
        [102, 126, 150]],
       [[150, 186, 222],
        [186, 231, 276],
        [222, 276, 330]],
       [[270, 336, 402],
        [306, 381, 456],
        [342, 426, 510]]])

>>> Num.dot(b,c)
array([[[ 30,  36,  42],
        [ 51,  57,  63],
        [ 71,  77,  83]],
       [[ 66,  81,  96],
        [117, 132, 147],
        [167, 182, 197]],
       [[102, 126, 150],
        [183, 207, 231],
        [263, 287, 311]]])

etc...


Is that all you need?

>
>   Nadav.

-- 
Bay Area Python Interest Group - http://www.baypiggies.net/

Chad Netzer






More information about the Python-list mailing list