2016-08-25 8 views
2

Iは、要素がこのように、特定のフォーマットを有するnumpyのアレイ(arr)を宣言したい:numpyのアレイ

dt1 = np.dtype([('sec', '<i8'), ('nsec', '<i8')]) 
dt2 = np.dtype([('name', 'S10'), ('value', '<i4')]) 

arr = np.array([('x', dtype=dt1), ('y', dtype=dt2)]) 

構造は、このようなものである:

arr['x'] = elements with the format dt1 (sec and nsec) 
arr['y'] = array of n elements with the format dt2 (name and value) 

そして、このようにアクセスする必要があります内の要素:

arr['x']['sec'], arr['x']['nsec'], arr['y'][0]['name'] etc. 

しかし、私は取得n invalid syntaxエラーです。 この状況で正しい構文は何ですか?

二重化合物DTYPEが働くかもしれない
+0

を働くだろう、あなたはあなたの配列を持っているしたい構造の言葉で説明できますか?壊れた構文から、あなたがしようとしていたことはまったく明らかではありません。あなたのアレイにはどのような形がありますか?あなたはそのdtypeを何にしたいですか?どのように要素にアクセスしますか? – user2357112

+0

構造体を次のようにしたい: 'arr ['x']' = 'dt1'(' sec'と 'nsec')という形式の要素 ' arr ['y'] '=' 'dt2'(' name'と 'value')の形式のn要素を返します そして、内部の要素は次のようにアクセスできます: ' arr ['x'] ['sec'] '、' arr ['x' ] ['nsec'] '、' arr ['y'] [0] ['name'] 'など このように表現できますか?それとも、回避策がありますか? –

+0

明確な書式で、その説明をあなたの質問に入れてください。 – hpaulj

答えて

3

In [834]: dt1 = np.dtype([('sec', '<i8'), ('nsec', '<i8')]) 
    ...: dt2 = np.dtype([('name', 'S10'), ('value', '<i4')]) 
    ...: 
In [835]: dt = np.dtype([('x', dt1),('y', dt2)]) 

In [837]: z=np.ones((3,), dtype=dt) 
In [838]: z 
Out[838]: 
array([((1, 1), (b'1', 1)), ((1, 1), (b'1', 1)), ((1, 1), (b'1', 1))], 
     dtype=[('x', [('sec', '<i8'), ('nsec', '<i8')]), ('y', [('name', 'S10'), ('value', '<i4')])]) 

In [839]: z['x']['sec'] 
Out[839]: array([1, 1, 1], dtype=int64) 

In [841]: z['y'][0]['name']='y0 name' 
In [842]: z 
Out[842]: 
array([((1, 1), (b'y0 name', 1)), ((1, 1), (b'1', 1)), ((1, 1), (b'1', 1))], 
     dtype=[('x', [('sec', '<i8'), ('nsec', '<i8')]), ('y', [('name', 'S10'), ('value', '<i4')])]) 
In [843]: z[0] 
Out[843]: ((1, 1), (b'y0 name', 1)) 

辞書には、同様の構文で

In [845]: d={'x':np.ones((3,),dt1), 'y':np.zeros((4,),dt2)} 
In [846]: d 
Out[846]: 
{'x': array([(1, 1), (1, 1), (1, 1)], 
     dtype=[('sec', '<i8'), ('nsec', '<i8')]), 
'y': array([(b'', 0), (b'', 0), (b'', 0), (b'', 0)], 
     dtype=[('name', 'S10'), ('value', '<i4')])} 
In [847]: d['y'][0]['name']='y0 name' 
+0

どうやって不明な長さの配列を宣言できますか? –

関連する問題