Numpy:类实例的数组

时间:2013-03-16 20:20:08

标签: python numpy inner-classes

这可能是一个愚蠢的问题,但是我想要自下而上地建立一个程序:

class Atom(object):
    def __init__(self):
        '''
        Constructor
        '''
    def atom(self, foo, bar):
        #...with foo and bar being arrays of atom Params of lengths m & n
        "Do what atoms do"
        return atom_out

...我可以将我的实例放在字典中:

class Molecule(Atom):
    def __init__(self):


    def structure(self, a, b):
        #a = 2D array of size (num_of_atoms, m); 'foo' Params for each atom
        #b = 2D array of size (num_of_atoms, n); 'bar' Params for each atom

        unit = self.atom()
        fake_array = {"atom1": unit(a[0], b[0]),
                      "atom2": unit(a[1], b[1]),
                       :                      :                    :
                       :                      :                    :}

    def chemicalBonds(self, this, that, theother):
        :                         :                      :
        :                         :                      :

我的问题是,有没有办法用numpy数组执行此操作,以便“real_array”中的每个元素都是atom的实例 - 即,单个计算的输出atom功能?我可以将它扩展到class Water(molecule):,它会对大structurechemicalBonds输出执行快速numpy操作,因此需要数组......或者我是否会这样做关于这个错误的方式?

此外,如果我走在正确的轨道上,我会很感激,如果你想提出如何构建像这样的“分层程序”的任何提示,因为我不确定我是否正确地做了以上最近发现我不知道我在做什么。

提前致谢。

1 个答案:

答案 0 :(得分:6)

通往地狱之路的过早优化......作为python的初学者,专注于你的程序和应该做的事情,一旦它做得太慢,你可以提出有关如何使它做的重点问题它更快。我会坚持学习python的内部数据结构来管理你的对象。如果您正在进行大型数组操作,则可以使用带有标准数据类型的numpy数组来实现算法。一旦有了一些工作代码,就可以进行性能测试,以确定需要优化的位置。

Numpy确实允许你创建对象数组,我会给你足够的绳索让自己挂在下面,但创建一个工具生态系统来操作这些对象数组并不是一件容易的事。你应该首先使用python数据结构(购买Beazley的基本python参考),然后使用numpy的内置类型,然后创建自己的compound numpy types。作为最后的手段,请使用以下示例中的对象类型。

祝你好运!

大卫

import numpy

class Atom(object):
    def atoms_method(self, foo, bar):
        #...with foo and bar being arrays of Paramsof length m & n
        atom_out = foo + bar
        return atom_out


array = numpy.ndarray((10,),dtype=numpy.object)

for i in xrange(10):
    array[i] = Atom()

for i in xrange(10):
    print array[i].atoms_method(i, 5)