Günter Dannoritzer wrote: > Christopher Barker wrote: > [...] >> The solution is to make an empty object array first, then populate it. > [...] >> Does that help? > > Robert, Chris, thanks for that explanation. I understand that now. > > The purpose of my (Python) class is to model a fixed point data type. So > I can specify how many bits are used for integer and how many bits are > used for fractional representation. Then it should be possible to assign > a value and do basic arithmetic with an instance of that class. The idea > is that based on fixed point arithmetic rules, each operation tracks > changes of bit width. > > I would now like to use that class in connection with numpy and my > question is, whether there is a way to make its use as intuitive as > possible for the user. Meaning that it would be possible to create a > list of my FixedPoint instances and then assign that list to a numpy array. > > I created some minimal code that shows the behavior: > > import numpy > > class FixPoint(object): > def __repr__(self): > return "Hello" > > def __len__(self): > return 3 > > def __getitem__(self, key): > return 7 > > > > if __name__ == '__main__': > a = numpy.array([FixPoint(), FixPoint()]) > print "a: ", a > > b = [FixPoint(), FixPoint()] > print "b: ", b > > > When running that code, the output is: > > a: [[7 7 7] > [7 7 7]] > b: [Hello, Hello] > > What is interesting, the list uses the representation of the class, > whereas array changes it to a list of the indexed values. > > Note that when changing the __len__ function to something else, the > array also uses the __repr__ output.
Yes, I believe we've explained why this is the case and how to work around it. You can encapsulate that workaround into a function specifically for making arrays of FixedPoint objects, if you like. > Would creating my own dType solve that problem? No. That's only useful for C data types, not Python instances. You're pretty much stuck with object arrays. -- Robert Kern "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth." -- Umberto Eco _______________________________________________ Numpy-discussion mailing list [email protected] http://projects.scipy.org/mailman/listinfo/numpy-discussion
