2

numpy recarray (recsub) のサブクラスを実装し、そのインスタンスを dtype 'object' (ndarr) の ndarray に割り当てようとしています。うまく機能しますが、サブクラス化された再配列が空の配列でインスタンス化されると問題が発生します。これは、サブクラス化された再キャリーのコードです。

class recsub(numpy.recarray):
"""subclassed recarray"""

def __new__(cls, *args, **kwargs):

    obj = numpy.recarray.__new__(cls, *args, **kwargs)

    return obj

def __init__(self, *arg, **kwargs):

    self.x = -1

def new_method(self):
    print 'new_method() : fooooooooooooo'

ndarray を次のように作成します。

ndarr = numpy.ndarray(5, 'object')

今、 recsub の 2 つのインスタンスを作成すると:

ndarr[0] = recsub(2, [('a','f8')])
ndarr[1] = recsub((), [('a','f8')])

今、ここで奇妙なことが起こっています。の出力:

print type(ndarr[0])
print type(ndarr[1])

は:

>>> <class '__main__.recsub'>
>>> <class 'numpy.core.records.record'>

だから私はndarri[1].xにアクセスできません

これは numpy 1.7 では機能していましたが、numpy 1.8 では機能しなくなりました! そのため、(n) ではなく形状 () を使用して再配列をインスタンス化すると、何かが欠けているようです。

どんな提案でも大歓迎です

事前にt​​nx、

4

1 に答える 1