numpyをサブクラス化して属性を追加しようとしてMaskedArray
いますが、適切な結果を得ることができないようです。
をサブクラス化するための例に従うことから始めましたnumpy.ndarray
。これは正常に機能します。
numpy.ma.MaskedArray
次に、代わりに次のようにサブクラス化してみました。
import numpy as np
class MyMaskedArray(np.ma.MaskedArray):
def __new__(cls, input_array, info=None):
obj = np.asarray(input_array).view(cls)
obj.info = info
return obj
def __array_finalize__(self, obj):
if obj is None: return
self.info = getattr(obj, 'info', None)
super(MyMaskedArray, self).__array_finalize__(obj)
arr = np.arange(5)
obj = MyMaskedArray(arr, info='information')
print obj.info
print obj[1:].info
その結果、
information
None
「情報」を二度期待していました。
obj = np.asarray(input_array).view(cls)
線をその問題に置き換えるか、obj = np.ma.MaskedArray(input_array).view(cls)
または解決しませんでした(私はこのように進みました。これは、サブクラスの将来の化身に合格しobj = np.ma.MaskedArray.__new__(cls, input_array)
たいからです)。*args
**kwargs
__new__
サブクラスの例とは対照的にMaskedArray.__array_finalize
、サブクラスのに呼び出しを追加する必要があることに注意してください。そうしないと、属性が見つかりません。__array_finalize__
ndarray
_mask
おそらく誰かが私を啓発することができます:
obj[1:].info
オリジナルを維持する方法obj.info
なぜ
ndarray
スーパークラスの呼び出しは必要ありませんが、必要です__array_finalize__
(MaskedArray
ボーナスの質問の詳細)。
コンテナクラスを作成する代わりにサブクラスを作成したいと思います。後者は、 sMaskedArray
に付属するいくつかの便利さを失うからです。MaskedArray
(注: /の問題はすでに「解決」しているため、これはこの質問と同じではありません。)__init__
__new__