2016-04-05 26 views
0

私は、各行が一意のフィールド名で参照できる2次元配列を作成することに興味があります。私はそのようなのようなレコードの配列で実験していますNumPy配列のフィールドの名前付け

>>> a = np.recarray((2, 10), dtype=[('x', 'f8'), ('y', 'f8')]) 

しかし、私はそうのような簡単な計算を行うとき、これは失敗します。

>>> a += 4.0 
TypeError: invalid type promotion 

異なるデータを設定する必要はありませんという名前のフィールドを使用する方法はあります各フィールドの型、または配列の計算をしようとすると失敗しませんか?

答えて

2

recarraystructured配列は、列に名前を付けるのに便利な方法になるように設計されていません。文字列、整数、浮動小数点数、日付など、CSVファイルから読み込むことのできる種類のデータ型を保持することを目的としています。

フィールド間で実行できる操作には制限があります。見つけたように、配列全体に値を追加することはできません。フィールドタイプが正しくなければ、フィールドごとにフィールドを追加する必要があります。同様に、2つのフィールドを合計することも、平均をとることもできません(np.sumまたはnp.mean関数)。また、これらの配列の変形や転置(行のフィールドの交換など)もできません。

Constructing np.array with overlapping fields in dtypeは2つの列の配列として2つのフィールドにアクセスするいくつかの方法を示す現在の質問です。

構造化された配列の柔軟性を本当に必要としない限り、通常のnd配列を使用する方がよいでしょう。カラムに名前でアクセスする場合は、変数を定義することを検討してください。 ind_x=0,ind_y=1ですので、a[2:5, ind_x]を使用できます。

2

recarrayを使用すると、オブジェクト属性などのフィールドにアクセスできます。これはうまくいく。

a.x += 4 
a.y += 5 
2

np.recarray((2, 10), dtype=[('x', 'f8'), ('y', 'f8')])各要素は、2つの要素のタプルサイズ2x10の行列を返します。したがって、操作a+4.0は全く意味を持ちません。あなたが独立してrecarrayの各フィールドにアクセスする必要が

a[0,0].x += 4.0 
+1

'a [0,0] .x'は、2次元配列を索引付けするための好ましい方法です(recまたはnot)。 – hpaulj

+0

ありがとうございます。私は答えを編集しました。 –

関連する問題