我有滚动窗口功能。它将numpy数组转换为数组列表。但是,我想将此函数的结果转换为纯数组。
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是object,而不是float或int。如果你
print(x_arr.shape)
你会得到(5,)。对于纯粹的float数组,其形状应为(5,2,2)。
你知道怎么做吗?
由于
答案 0 :(得分:2)
您的x_rolled
是不同形状的数组列表。所以np.array
无法将其转换为多维的整数数组。
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)]
如果省略最后一个元素,我会得到一个3d数组:
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)
可以轻松地转换为float
np.array(x_rolled[:-1]).astype(float)
我怀疑你的滚动功能无法正常工作。