2017-08-17 18 views
0

私はかなりばかげた質問をしていますが、何らかの理由で、私は何をすべきか分かりません。私は、次の形状持つべき多次元numpyの配列た:numpyの配列の中のPythonの平坦な配列

(345138、30、300)

しかしながら、実際にこのような形状を有している:

(345138、1)

1素子アレイ内部

形状

(30、300)が

を含む配列であり、どのようにI「移動」内のアレイ、そのようSHA PEは正しいですか?

[[ array([[0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    ..., 
    [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0]], dtype=int32)] 
[ array([[0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    ..., 

が、私は、配列(...)せずにこれをしたい、DTYPE = 32と形状になるように、最初の配列にそこにあるものを移動する:それはこのようになります瞬間

(345138,30,300)、次のようになります。

[[ [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    ..., 
    [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0]], 
[ [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    ..., 

アイデアをお持ちですか?

+0

はすでに ')(' .tolistを試みたことがありますか? –

+0

試してみてください: 'np.array(x)'と形が互換性があれば、それらは押しつぶされます。 –

+0

hmmmいいえ、残念ながら、これは1要素配列がすべてを台無しにしているものを変更しませんでした – SirTobi

答えて

2

2d配列(オブジェクトdtype)を含む2次元配列があるようです。私はそのようなものを構築することができます:単純にnp.arrayに動作しないことを包む

In [972]: arr = np.empty(4,dtype=object) 
In [973]: arr = np.empty((4,1),dtype=object) 
In [974]: for i in range(4): arr[i,0]=np.ones((2,3),int) 
In [975]: arr 
Out[975]: 
array([[array([[1, 1, 1], 
     [1, 1, 1]])], 
     [array([[1, 1, 1], 
     [1, 1, 1]])], 
     [array([[1, 1, 1], 
     [1, 1, 1]])], 
     [array([[1, 1, 1], 
     [1, 1, 1]])]], dtype=object) 

tolistを適用しないではない:「フラット化」の

In [976]: np.array(arr) 
Out[976]: 
array([[array([[1, 1, 1], 
     [1, 1, 1]])], 
     [array([[1, 1, 1], 
     [1, 1, 1]])], 
     [array([[1, 1, 1], 
     [1, 1, 1]])], 
     [array([[1, 1, 1], 
     [1, 1, 1]])]], dtype=object) 
In [977]: arr.tolist() 
Out[977]: 
[[array([[1, 1, 1], 
     [1, 1, 1]])], [array([[1, 1, 1], 
     [1, 1, 1]])], [array([[1, 1, 1], 
     [1, 1, 1]])], [array([[1, 1, 1], 
     [1, 1, 1]])]] 

一つの方法は、concatenateのいくつかのバージョンを使用することです:

In [978]: np.stack(arr.ravel()) 
Out[978]: 
array([[[1, 1, 1], 
     [1, 1, 1]], 

     [[1, 1, 1], 
     [1, 1, 1]], 

     [[1, 1, 1], 
     [1, 1, 1]], 

     [[1, 1, 1], 
     [1, 1, 1]]]) 
In [979]: _.shape 
Out[979]: (4, 2, 3) 

私はstackとして使用することができます〜1dは外側の配列を、減らすためにravelを使用リスト。 stackは、np.arrayのように動作します。これは、指定できる新しい軸上の要素を結合します。


tolistarray一緒に働くことができます。

In [981]: np.array(arr.tolist()) 
Out[981]: 
array([[[[1, 1, 1], 
     [1, 1, 1]]], 

     [[[1, 1, 1], 
     [1, 1, 1]]], 


     [[[1, 1, 1], 
     [1, 1, 1]]], 


     [[[1, 1, 1], 
     [1, 1, 1]]]]) 
In [982]: _.shape 
Out[982]: (4, 1, 2, 3) 

それともtolistプラスsqueezeを(実際にnp.asarray(...).squeeze()であるが)

In [983]: np.squeeze(arr.tolist()) 
Out[983]: 
array([[[1, 1, 1], 
     [1, 1, 1]], 

     [[1, 1, 1], 
     [1, 1, 1]], 

     [[1, 1, 1], 
     [1, 1, 1]], 

     [[1, 1, 1], 
     [1, 1, 1]]]) 
In [984]: _.shape 
Out[984]: (4, 2, 3) 
+0

こんにちは、ありがとう、これは働いた!それはまた、私のPCをクラッシュ:D あなたは素晴らしいです! – SirTobi