2017-01-07 5 views
-2

私は配列がありません:array([[59], [72], [117], ..., [15530], [13091], [983]], dtype=object)、魔女の形は(39104L,)です。それをarray([59, 72, 117, ..., 15530, 13091, 983], dtype=float32のように配列に再構成する方法は?NumPyでアレイを再形成するには?

答えて

1

私はあなたの元の配列は、リストの1次元配列である疑いがある:これらのリストの1つ以上が持っていた場合はそのような

array([[59], [72], [117], ..., [15530], [13091], [983]], dtype=object) 
# shape (39104L,) 

通常、何かが整数

In [796]: x=np.array([[59], [72], [117], [15530], [13091], [983]]) 
In [797]: x 
Out[797]: 
array([[ 59], 
     [ 72], 
     [ 117], 
     [15530], 
     [13091], 
     [ 983]]) 
In [798]: x.shape 
Out[798]: (6, 1) 

で2次元配列することだろうが、オブジェクト配列を取得する要素の数が異なります。

In [799]: x=np.array([[59], [72], [117], [15530,34], [13091], [983]]) 
In [800]: x 
Out[800]: array([[59], [72], [117], [15530, 34], [13091], [983]], dtype=object) 
In [801]: x.shape 
Out[801]: (6,) 

これはエラーの原因となります以下のようなS:

In [804]: np.asarray(x, dtype=float) 
ValueError: setting an array element with a sequence. 

しかし

In [805]: x.tolist() 
Out[805]: [[59], [72], [117], [15530, 34], [13091], [983]] 

はあなたの配列の要素のいずれかどうかを確認するために、このような何かを試してみてください1より長い:あなたも表示する必要があるかもしれません

In [806]: max([len(i) for i in x]) 
Out[806]: 2 

私の疑惑を確認するための1つ以上の要素のタイプ:

In [807]: type(x[0]) 
Out[807]: list 

また、このアレイはどのように構築されましたか?

0

形状が(n_items、)の場合、すでに1次元のベクトルです。これから "普通の" Pythonリストを取得したい場合はnumpy.ndarray.tolist()を使います。

一般的に形を変えるには、numpy.reshape()メソッドがあります。

+0

エラー: 'AttributeError: 'list'オブジェクトに 'tolist''属性がありません。 –

+0

numpy配列が' my_array'と呼ばれる場合、 'type(my_array)'の出力はどうですか? –

0

書いたとおり、配列の形状は(39104L,1)で、(39104L,)ではありません。つまり、配列には冗長な次元があります。 np.squeezeを使用してこれを削除できます。

一般的には、np.reshapeを使用してください。np.squeezeの代わりに使用することもできます。

質問の別の側面は、配列のdtypeを変更することです。そのためには、

a = np.asarray(a, dtype='float32') 

ここで、aはあなたの配列です。

+0

私は作成しましたが、エラー: 'ValueError:配列を持つ配列要素を設定する 'を出力します。 –

+0

質問を編集し、完全なコード例を投稿する必要があります。細部が欠落しているため、あなたは現在見ることができないいくつかのエラーがあります。 –

関連する問題