7

multiprocessing モジュールを使用して numpy 配列の操作に取り組んでおり、ここで実行したコードのいくつかを試しているときに問題が発生しています。具体的には、numpy 配列から ctypes 配列を作成し、ctypes 配列を numpy 配列に戻そうとしています。コードは次のとおりです。

    shared_arr = multiprocessing.RawArray(_numpy_to_ctypes[array.dtype.type],array.size)

同期ロックは一切必要ないので、RawArray を使用しています。ctypes データ型は、入力配列の dtype に基づいて辞書から取得されます。それは素晴らしく働いています。

    shared_arr = numpy.ctypeslib.as_array(shared_arr.get_obj())

ここで、次のようなスタック トレースを取得します。

    AttributeError: 'c_double_Array_16154769' object has no attribute 'get_obj'

この投稿から次のことも試しましたが、同じエラーが発生します。

    def tonumpyarray(shared_arr):
        return numpy.frombuffer(shared_arr.get_obj())  

私はpython 2.6の実行に行き詰まっており、それが問題であるかどうか、変数名の共有に問題があるかどうかはわかりません(メモリ使用量をできるだけ低く抑えようとしており、numpy配列とctypesを複製しないようにしていますメモリ内の配列)、またはPythonのこのコンポーネントについて学んでいるので、何か他のもの。

提案?

4

1 に答える 1

11

RawArray を使用しているため、共有メモリから割り当てられた単なる ctypes 配列です。ラップされたオブジェクトがないため、ラップされたオブジェクトを取得するために get_obj() メソッドは必要ありません。

>>> shared_arr = multiprocessing.RawArray("d",10)
>>> t = np.frombuffer(shared_arr, dtype=float)
>>> t[0] = 2
>>> shared_arr[0]
2.0
于 2012-07-30T04:12:54.477 に答える