5

这可能是一个愚蠢的问题,但是说我想从下到上构建一个程序,如下所示:

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):执行快速 numpy 操作,因此需要数组......或者是我以错误的方式解决这个问题吗?structurechemicalBonds

另外,如果我走在正确的轨道上,如果您想提出有关如何构建这样的“分层程序”的任何提示,我将不胜感激,因为我不确定我是否正确地执行了上述操作并且最近发现我不知道我在做什么。

提前致谢。

4

1 回答 1

7

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

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

祝你好运!

大卫

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)
于 2013-03-16T21:45:39.007 回答