[Numpy-discussion] MaskedArray problem?

Álvaro Tejero Cantero alvaro at antalia.com
Mon May 17 09:25:05 EDT 2004


Hello,

I'm trying to rewrite my simulation using masked arrays. For that I
define masks for triangular_inferior NxN and
diagonal_triangular_superior NxN arrays.

I'm unsuccesfully trying to know what happens with the program when I
operate over a MaskedArray: it always says

Traceback (most recent call last):
  File "<stdin>", line 31, in ?
  File "<stdin>", line 26, in run
  File "/usr/lib/python2.3/site-packages/numarray/ma/MA.py", line 990,
in __pow__
    return power(self, other, third)
  File "/usr/lib/python2.3/site-packages/numarray/ma/MA.py", line 1585,
in power
    return masked_array(Numeric.power(fa, fb), m)
  File "/usr/lib/python2.3/site-packages/numarray/ufunc.py", line 877,
in _cache_miss2
    mode, win1, win2, wout, cfunc, ufargs = \
  File "/usr/lib/python2.3/site-packages/numarray/ufunc.py", line 921,
in _setup
    intypes = (in1._type.name, in2._type.name)
AttributeError: 'ObjectArray' object has no attribute '_type'


For reference, I copy a simplified version of the program. The statement
that causes the AttributeError is the last from run(N,D,S):

---------------------------

import numarray.ma as mka
import numarray.random_array as rnd
import numarray as nmr

def relative(x, msk):
    (N,D) = x.shape
    return mka.array([nmr.subtract.outer(x[:,i],x[:,i]) for i in nmr.arange(D)],
                     mask = nmr.array([msk for i in nmr.arange(D)],typecode=mka.MaskType))

def scalar(x,y):
    return mka.add.reduce(x*y,axis=0)

def run(D,N,S):
    trig_inf = nmr.array(([[(0,1)[i<j] for i in nmr.arange(N)] for j in nmr.arange(N)]), typecode=mka.MaskType)
    diag_trig_sup = 1 - trig_inf #print mka.is_mask(diag_trig_sup) gives "1"

    # positions and velocities
    r = rnd.random([N,D]) #should be overlap-checked
    v = rnd.random([N,D])

    # relative positions and velocities
    r_rel = relative(r, diag_trig_sup)
    v_rel = relative(v, diag_trig_sup)

    RV, VV, RR = scalar(r_rel,v_rel), scalar(v_rel,v_rel), scalar(r_rel,r_rel)
    discr = RV**2 - VV*(RR-S**2)      #<<<<----------PROBLEM HERE----------------



if __name__ == '__main__':
    run(D=3,N=4,S=1e-8)


-------------------------

Any other advice that you may give me is very wellcome. My deadline is
approaching and I'm really reluctant to rewrite all this in C++ but I
don't see the light.

Thank you in advance,

 á.


-- 
Álvaro Tejero Cantero

http://alqua.org    --	documentos libres
			free documents





More information about the NumPy-Discussion mailing list