やや不均一なデータ型のnumpy配列を使用することに興味があります。numpyはデータが同種でなければならないと指定しているので、これはすべてのサブdtypeのユニオンラッパーとして機能するsuper-dtypeを定義することで実現されます。次に、サブdtypeのフィールドにアクセスすると、基になるデータの異なる解釈が得られます。
たとえば、これにはすでにいくつかの機能があります
dtype(('|S2', [('x', '|i1'), ('y', '|i1')]))
は2バイトの文字列の配列を指しますが、1番目と2番目のバイトは、「x」および「y」フィールド名を介して整数として解釈することもできます。ただし、2バイトの文字列にフィールドラベルを割り当てる方法がわかりません。
これをより一般的にして、データに任意の数の異なるフィールド仕様をオーバーレイできるようにすることはできますか?
私の最初の試みは、dtypeでフィールドオフセットを指定することでしたが、オフセットを並べ替える必要があるという苦情で失敗しました(つまり、重複しないデータ)。
dtype1 = np.dtype(dict(
names=['a','b'],
formats=['|a2','<i2'],
offsets=[0,0]))
別の手法も機能しますが、面倒です。この手法では、いくつかの変数を同じ基になるデータのビューとして定義し、さまざまな変数のdtypeを変更して、さまざまな形式のデータにアクセスできるようにすることができます。
a=np.zeros(3, dtype='<a2')
b=a[:]
b.dtype='<i2'
これにより、aとbのどちらを見ているかに応じて、文字列または整数としてデータにアクセスできます。しかし、それはデータを操作する面倒な方法です。理想的には、任意のオフセットでさまざまな異なるフィールドを指定できるようにしたいと思います。これを行う方法はありますか?