次の単純なクラスを考えてみます。
class Quantity(object):
def __init__(self, value, unit):
self.unit = unit
self.value = value
def __getitem__(self, key):
return Quantity(self.value[key], unit=self.unit)
def __len__(self):
return len(self.value)
インスタンスを作成します。
import numpy as np
q = Quantity(np.array([1,2,3]), 'degree')
print(repr(np.array(q)))
Quantity
次に、このオブジェクトを Numpy に渡すと、オブジェクトが 3 つのインスタンスのオブジェクト配列に分割されます。
array([<__main__.Quantity object at 0x1073a0d50>,
<__main__.Quantity object at 0x1073a0d90>,
<__main__.Quantity object at 0x1073a0dd0>], dtype=object)
これは、 メソッド__len__
と__getitem__
メソッドが存在するためです。いずれかを削除すると、オブジェクトは分割されません。
array(<__main__.Quantity object at 0x110a4e610>, dtype=object)
__len__
と を引き続き保持したいの__getitem__
ですが、Numpy がオブジェクトを分割しないようにする方法はありますか?
編集: ndarray サブクラスを作成する以外のソリューションに興味がありますQuantity