2016-10-15 7 views
0

空の配列で開始しようとしています。コードが進むにつれて、最初の列はdatetime.datetime、2列目はstr、3列目はfloat、そして4列目はintとなります。さまざまな種類のデータを格納する空の配列を作成する方法

私は次のことを試してみました:

A = np.empty([10, 4]) 
A[0][0] = datetime.datetime(2016, 10, 1, 1, 0) 

私はエラーを取得する:

TypeError: float() argument must be a string or a number 
+1

['構造化配列](http://docs.scipy.org/doc/numpy/user/basics.rec.html)は1つのオプションです。 – Divakar

答えて

1

構造アレイのアプローチ:

はあなたの列の仕様に応じDTYPEを定義:

In [460]: dt=np.dtype('O,U10,f,i') 
In [461]: from datetime import datetime 

Initalize 3つの要素(不3×4)と空の配列、

In [462]: A = np.empty((3,), dtype=dt) 
In [463]: A 
Out[463]: 
array([(None, '', 0.0, 0), (None, '', 0.0, 0), (None, '', 0.0, 0)], 
     dtype=[('f0', 'O'), ('f1', '<U10'), ('f2', '<f4'), ('f3', '<i4')]) 

記入いくつかの値 - フィールド名(列番号ではない)によって

In [464]: A['f1']=['one','two','three'] 
In [465]: A['f0'][0]=datetime(2016, 10, 1, 1, 0)  
In [467]: A['f2']=np.arange(3) 
In [468]: A 
Out[468]: 
array([(datetime.datetime(2016, 10, 1, 1, 0), 'one', 0.0, 0), 
     (None, 'two', 1.0, 0), 
     (None, 'three', 2.0, 0)], 
     dtype=[('f0', 'O'), ('f1', '<U10'), ('f2', '<f4'), ('f3', '<i4')]) 

この配列の要素の表示:私はそれがdatetimeオブジェクトを保持できるので、第一フィールドobject DTYPEを作ることにしました

In [469]: A[0] 
Out[469]: (datetime.datetime(2016, 10, 1, 1, 0), 'one', 0.0, 0) 

- 数値または文字列ではありません。 datetimeオブジェクトがない

np.datetime64格納floatとして日付、および機能の多くを提供する:

In [484]: dt1=np.dtype('datetime64[s],U10,f,i') 
In [485]: A1 = np.empty((3,), dtype=dt1) 
In [486]: A1['f0']=datetime(2016, 10, 1, 1, 0) 
In [487]: A1['f3']=np.arange(3) 
In [488]: A1 
Out[488]: 
array([(datetime.datetime(2016, 10, 1, 1, 0), '', 0.0, 0), 
     (datetime.datetime(2016, 10, 1, 1, 0), '', 0.0, 1), 
     (datetime.datetime(2016, 10, 1, 1, 0), '', 0.0, 2)], 
     dtype=[('f0', '<M8[s]'), ('f1', '<U10'), ('f2', '<f4'), ('f3', '<i4')]) 

第三のアプローチは、アレイ全体オブジェクトDTYPEを作ることです。それは効果的に栄光のリストです。多くのオペレーションはプレーンな反復に頼っているか、あるいは実装されていないだけです。より一般的ですが、通常の数値配列の力を失ってしまいます。

1

あなたはdtype=objectを使用することができます。

A = np.empty([10, 4], dtype=object) 
A[0][0] = datetime.datetime(2016, 10, 1, 1, 0) 

構造化された配列を使用することもできますが、文字列オブジェクトの長さは固定されています。任意の大きなオブジェクトが必要な場合は、dtype=objectを使用する必要があります。しかしこれは配列の目的としばしば矛盾します。

+0

「配列の目的を矛盾させる」とはどういう意味ですか?パフォーマンスに影響しますか? – Zanam

関連する問題