Python3,将数组列表转换为纯粹的float数组

时间:2017-03-14 16:04:02

标签: arrays list python-3.x numpy

我有滚动窗口功能。它将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)。

你知道怎么做吗?

由于

1 个答案:

答案 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)

我怀疑你的滚动功能无法正常工作。