2017-04-14 9 views
0

tは寸法(30,5)(または実際には、(1,30,5))及びxの2-D numpyのアレイはまた、形状(1000, 5)のnumpyのアレイであると言うことができますnumpyの。私はxの2次元データを3次元データに変換しようとしています。新しい配列の各行列は、xの1000行のうち30行(連続)です。あなたはtx[:30]、またはスタッキング2-Dアレイは

t = np.vstack((t, x[:30])) 

のタプルにnp.vstackを使用すると、私の出力の形状が(60,5)ですが、私はそれが(2, 30, 5)になりたいです。これはどうすればいいですか?

UPDATE:私は実装し、DKVによって提案を試してみました:

t = np.random.rand(1,30,5) 
for i, n in zip(x_data, np.arange(len(x_data))): 
    l = len(x_data) - 29 
    if n < l: 
     t = np.vstack((t,x_data[n:n+30].reshape(1,30,5))) 

t = np.delete(t, 0) 
print(t[:2], t.shape) 


>>> [ 0.38009933 0.82223491] 
>>> (1691249,) 

今では一次元です。何かご意見は?

+0

't.reshape(2,30,5)'? – Psidom

+0

(30,5)と(1,30,5)は異なる形状です。 (30,5)は30行5列の行列です。 (1,30,5)は30x5水平面のように見えます – dkv

+0

あなたはnp.delete()を間違って使っています。その行の前にt.shapeを印刷して、正しい形であることを確認してください。 – dkv

答えて

0

多くの方法があります。 1つは

np.r_['0,3,1', t, x[:30]] 

r_は「ユニバーサル連結子」のようなものです。この場合の最初の引数は、軸0に沿って連結するように指示し、配列引数3dを作成し、必要であれば、パッドの配列で軸0の軸が軸番号1になるようにパッドの次元にします。

0

x [:30]スライスの形状を変更して、実際に正しい寸法に積み重ねるように、tの寸法に合わせる必要があります。

t = np.ones((1,30,5)) 
x = np.ones((1000,5)) 
out = np.vstack((t, x[:30].reshape(1,30,5))) 
out.shape 
>>> (2L, 30L, 5L) 
+0

可能であれば、更新^^^をご覧ください。ありがとう –