2017-03-14 12 views
0

私はローリングウィンドウ関数を持っています。それは配列のリストにnumpy配列を変換します。しかし、私はこの関数の結果を純粋に配列に変換したい。Python3、配列のリストを純粋にfloatの配列に変換する

import numpy as np 

def get_rolling_window(arr, window): 
    arr_rolled = [arr[i:i+window] for i in np.arange(arr.shape[0])] 
    return arr_rolled 

x = np.arange(10).reshape(5,2) 
x_rolled = get_rolling_window(x, 2) 

今、x_rolledは配列のリストです。使用している場合

x_arr = np.array(x_rolled) 

x_arrのdtypeがfloatまたはintではないため、機能しません。あなたならば

print(x_arr.shape) 

あなたは(5、)を取得します。浮動小数点数の純粋な配列の場合、その形状は(5,2,2)でなければなりません。

あなたはそれを行う方法を知っていますか?

おかげ

+0

'np.concatenate(x_rolled)'はあなたに何を与えるのですか? – Divakar

答えて

2

あなたx_rolledは異なる形状のアレイのリストです。だからnp.arrayはintの多次元配列に変換できません。

簡単にフロート

np.array(x_rolled[:-1]).astype(float) 

としてキャストすることができ

In [237]: np.array(x_rolled[:-1]) 
Out[237]: 
array([[[0, 1], 
     [2, 3]], 

     [[2, 3], 
     [4, 5]], 

     [[4, 5], 
     [6, 7]], 

     [[6, 7], 
     [8, 9]]]) 
In [238]: _.shape 
Out[238]: (4, 2, 2) 

私はあなたのロール機能として動作していない疑いがある:私は最後の要素を省略した場合、私は三次元の配列を取得

In [235]: x_rolled 
Out[235]: 
[array([[0, 1], 
     [2, 3]]), array([[2, 3], 
     [4, 5]]), array([[4, 5], 
     [6, 7]]), array([[6, 7], 
     [8, 9]]), array([[8, 9]])] 
In [236]: [x.shape for x in x_rolled] 
Out[236]: [(2, 2), (2, 2), (2, 2), (2, 2), (1, 2)] 

あなたは欲しい。

+0

ご協力いただきありがとうございます。あなたは、絶対に正しい。 – aura

関連する問題