2017-07-27 4 views
2

私は長さ(X)の配列の長さが同じですが、長さ(Y)は同じですが、タイプが "オブジェクト"で次元(X、)を持っています。私はメンバ配列( "float")の要素の型を持つ次元(X、Y)の配列にこれを "変換"したいと思います。Pythonで配列の配列を多次元配列に変換するにはどうすればよいですか?

私はこれを行うには見ることができる唯一の方法は、「手動」

[x for x in my_array] 

のようなもので、この「変換」を実現するためのより良いイディオムはありますか?例えば


私のようなものがあります:shape(X、)ではなく(X、10)が

array([array([ 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.]), 
     array([ 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.]), 
     array([ 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.]), ..., 
     array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]), 
     array([ 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.]), 
     array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.])], dtype=object) 

を。

+0

どうやって最初にこのアレイを手に入れましたか?この種のことは、通常、プログラムの早い段階で間違ったことをしたことを意味します。私はサブアレイが実際に同じ長さではないと思う。 – user2357112

+0

np.transpose(your_array).astype(float) –

+0

@ Mr_U4913: "ValueError:シーケンスで配列要素を設定する" – orome

答えて

2

新しい軸で配列を連結することができます。たとえば:

In [1]: a=np.array([1,2,3],dtype=object) 
    ...: b=np.array([4,5,6],dtype=object) 

配列の配列は、我々だけで削除答えとして、arrayとそれらを組み合わせることはできませんようにするにはでした代わりに、我々は右の空の配列を作成する必要が

In [2]: l=np.array([a,b]) 
In [3]: l 
Out[3]: 
array([[1, 2, 3], 
     [4, 5, 6]], dtype=object) 
In [4]: l.shape 
Out[4]: (2, 3) 

形状、およびそれを埋める:

In [5]: arr = np.empty((2,), object) 
In [6]: arr[:]=[a,b] 
In [7]: arr 
Out[7]: array([array([1, 2, 3], dtype=object), 
       array([4, 5, 6], dtype=object)], 
       dtype=object) 

np.stacknp.arrayのような行為が、concatenateを使用しています。

In [8]: np.stack(arr) 
Out[8]: 
array([[1, 2, 3], 
     [4, 5, 6]], dtype=object) 
In [9]: _.astype(float) 
Out[9]: 
array([[ 1., 2., 3.], 
     [ 4., 5., 6.]]) 

我々はまた、異なる軸上のアレイを組み合わせることconcatenatehstackまたはvstackを使用することができます。彼らはすべて、配列の配列を配列のリストとして扱います。

arrが2d(またはそれ以上)の場合は、最初にravelにする必要があります。

+0

'stack'だけのように見えますが(w/o' astype')、そのトリックを行います。 – orome

関連する問題