subclassing ndarry

Hi,
I am trying to create an ndarry subclass for vector calculations. The
result is not what I intent:

import numpy as np

class Vector(np.ndarray):
  def __abs__(self):
    return(np.sqrt(sum(self**2)))

V = Vector([1,2,3])

print np.sqrt(sum(self**2))
print abs(V)

I do not understand the docs at http://www.scipy.org/Subclasses but it
is late now.

Martijn

P.S. I know this is not strictly matplotlib related, but since MP uses
numpy so heavily, I felt free to ask.

Hi,
I found that ndarray is the wrong class to use for this purpose. The
vector I created in the example below was just en uninitialised 3D
vector. Arrays cannot be subclassed:

class Vector(np.array):
  pass

returns an error. But using a matrix as base class works:

class Vector(np.matrix):
  def __abs__(self):
    l = np.sqrt(self*self.transpose())
    return(l[0,0])

V1 = Vector([1,2,2])
V2 = Vector([5,0,4])
print abs(V2-2*V1)

prints 5.0, as it should.

It is very crude (no check on dimensions!), but works.

Martijn

···

On Thu, 2011-09-22 at 23:54 +0200, Martijn wrote:

Hi,
I am trying to create an ndarry subclass for vector calculations. The
result is not what I intent:

import numpy as np

class Vector(np.ndarray):
  def __abs__(self):
    return(np.sqrt(sum(self**2)))

V = Vector([1,2,3])

print np.sqrt(sum(self**2))
print abs(V)

I do not understand the docs at http://www.scipy.org/Subclasses but it
is late now.

Martijn

P.S. I know this is not strictly matplotlib related, but since MP uses
numpy so heavily, I felt free to ask.

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2dcopy1
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users