5

標準のnumpy配列と相互運用できる配列のようなオブジェクトを実装しています。私はちょうど次のように絞り込む厄介な問題にぶつかりました:

class MyArray( object ):
  def __rmul__( self, other ):
    return MyArray() # value not important for current purpose

from numpy import array
print array([1,2,3]) * MyArray()

これにより、次の出力が得られます。

[<__main__.MyArray instance at 0x91903ec>
 <__main__.MyArray instance at 0x919038c>
 <__main__.MyArray instance at 0x919042c>]

MyArray().__rmul__( array([1,2,3]) )明らかに、私が期待したように呼び出すのではなく__rmul__、配列の個々の要素ごとに呼び出され、結果はオブジェクト配列にラップされます。これは、Pythonの強制ルールに準拠していないように思われます。さらに重要なことに、それは私の左の乗算を役に立たなくします。

誰かがこれを回避する方法を知っていますか?

(を使用して修正できると思いました__coerce__が、リンクされたドキュメントでは、二項演算子に応答して呼び出されなくなったと説明されています...)

4

1 に答える 1

1

numpyはこの問題の簡単な修正を提供することがわかりました。次のコードは意図したとおりに機能します。

class MyArray( object ):
  __array_priority__ = 1. # <- fixes the problem
  def __rmul__( self, other ):
    return MyArray()

詳細については、こちらをご覧ください

于 2011-08-14T14:57:33.613 に答える