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):
        :                         :                      :
        :                         :                      :

私の質問は、 ""の各要素が--iereal_arrayのインスタンス、つまり関数の個々の計算の出力になるように、numpy配列でこれを行う方法はありますか?これを拡張して、ラージ出力と出力に対して高速のnumpy操作を実行できるようにすることができます。したがって、配列が必要になります...または、これを間違った方法で実行している場合はどうでしょうか。atomatomclass Water(molecule):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 に答える