2016-11-16 13 views
0

を与える:が、私はそうのように、numpyのアレイのリストからいくつかのnumpyのアレイを作成しています間違った形状

seq_length = 1500 
seq_diff = 200 # difference between start of two sequences 
# x and y are 2D numpy arrays 
x_seqs = [x[i:i+seq_length,:] for i in range(0, seq_diff*(len(x) // seq_diff), seq_diff)] 
y_seqs = [y[i:i+seq_length,:] for i in range(0, seq_diff*(len(y) // seq_diff), seq_diff)] 
boundary1 = int(0.7 * len(x_seqs)) # 70% is training set 
boundary2 = int(0.85 * len(x_seqs)) # 15% validation, 15% test 
x_train = np.array(x_seqs[:boundary1]) 
y_train = np.array(y_seqs[:boundary1]) 
x_valid = np.array(x_seqs[boundary1:boundary2]) 
y_valid = np.array(y_seqs[boundary1:boundary2]) 
x_test = np.array(x_seqs[boundary2:]) 
y_test = np.array(y_seqs[boundary2:]) 

私はn個(形状の6つのアレイで終わるしたいのですが、 1500,300)ここで、nはトレーニング、検証およびテストアレイのそれぞれのデータの70%、15%または15%のいずれかです。 _train_validの配列はうまくいくが、_testの配列は配列の1次元配列である。つまり:

  • x_train.shape(459, 1500, 300)
  • x_valid.shapeある(99, 1500, 300)
  • x_test.shape(99,)

である。しかしx_testを印刷することが正しいの要素が含まれていることを確認している - それはの99-要素long配列のIE (1500, 300)アレイ。

_train_validの行列はありませんが、なぜ_test行列の形が正しくないのですか?

答えて

1

x_seqsの項目の長さが異なります。それらがすべて同じ長さの場合、np.arrayはそれらから3次元配列を作ることができます。それらが異なるときは、リストのオブジェクト配列を作成します。 dtypex_testを見てください。 [len(i) for i in x_test]を見てください。

私は、あなたのコードを取っ追加:

x=np.zeros((2000,10)) 
y=x.copy() 
... 
print([len(i) for i in x_seqs]) 
print(x_train.shape) 
print(x_valid.shape) 
print(x_test.shape) 

をして得た:

1520:~/mypy$ python3 stack40643639.py 
[1500, 1500, 1500, 1400, 1200, 1000, 800, 600, 400, 200] 
(7,) 
(1, 600, 10) 
(2,) 
関連する問題