aura
aura

Reputation: 543

Python3, convert list of array to purely array of float

I have a rolling window function. It converts a numpy array to list of arrays. However, I want to convert the results of this function to purely array.

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)

now x_rolled is a list of arrays. If I use

x_arr = np.array(x_rolled)

It will not work, because the dtype of x_arr is object, not float or int. And if you

print(x_arr.shape)

you will get (5,). For a pure array of float, its shape should be (5,2,2).

Do you know how to do it?

Thanks

Upvotes: 0

Views: 310

Answers (1)

hpaulj
hpaulj

Reputation: 231570

Your x_rolled is a list of arrays of different shapes. So np.array cannot turn it into a multdimensional array of ints.

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)]

If I omit the last element, I get a 3d array:

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)

which can easily be cast as float

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

I suspect your roll function is not working as you want.

Upvotes: 2

Related Questions