I have 2 PCs with 2 different installs:
ActivePython 2.4.3 Build 12 with numpy version '1.0b1'
and
Enthought 2.4.3 (1.0.0 #69)  with numpy version '0.9.7.2476'

The attached runs Ok on numpy v1.0, but on Enthought's, print a1[0] gives:
IndexError: 0-d arrays can't be indexed.

It seems that the 0.9.7 numpy.asarray is not creating a true array from Dummy class in the code below. Enthought only comes with 0.9.9.2706 (now). When was the asarray behavior supported, or, is there some other issue I'm missing? I'll use Activestate's distro if needed, but I'd like to keep Enthought for that one...



def fromaddress(address, dtype, shape, strides=None):
    """ Create a numpy array from an integer address, a dtype
    or dtype string, a shape tuple, and possibly strides.
    """
    import numpy
    # Make sure our dtype is a dtype, not just "f" or whatever.
    dtype = numpy.dtype(dtype)

    class Dummy(object):
        pass
    d = Dummy()
    d.__array_interface__ = dict(
        data = (address, False),
        typestr = dtype.str,
        descr = dtype.descr,
        shape = shape,
        strides = strides,
        version = 3,
    )
    return numpy.asarray(d)

Thanks,
Ray
""" nFromAddress.py
"""

def fromaddress(address, dtype, shape, strides=None):
    """ Create a numpy array from an integer address, a dtype 
    or dtype string, a shape tuple, and possibly strides.
    """
    import numpy
    # Make sure our dtype is a dtype, not just "f" or whatever.
    dtype = numpy.dtype(dtype)

    class Dummy(object):
        pass
    d = Dummy()
    d.__array_interface__ = dict(
        data = (address, False),
        typestr = dtype.str,
        descr = dtype.descr,
        shape = shape,
        strides = strides,
        version = 3,
    )
    return numpy.asarray(d)


##Numeric example, with address kludge
import Numeric, numpy, ctypes, string
a0 = Numeric.zeros((10000), Numeric.Int16)
nAddress = int(string.split(repr(a0.__copy__))[-1][:-1], 16)
tmp=(ctypes.c_long*1)(0)
ctypes.memmove(tmp, nAddress+8, 4)
nAddress = tmp[0]
a1 = fromaddress(nAddress, numpy.int16, (10000,))
a0[0] = 5
print a1[0]

## numpy example
a2 = numpy.zeros(10000, numpy.int16)
nAddress = a2.__array_interface__['data'][0]
nType = a2.__array_interface__['typestr']
nShape = a2.__array_interface__['shape']
a3 = fromaddress(nAddress, nType, nShape)
a2[0] = 5
print a3[0]
_______________________________________________
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to