В настоящее время я использую np.concatenate
для преобразования (n_columns, n_rows, n_positions) ndarray
в (n_rows, n_columns * n_positions) ndarray
.
Потому что np.concatenate
копирует первым, а поскольку данные являются "смежными", мне интересно, нет ли более быстрого способа с помощью reshape получить массив, который я ищу?
Но в любом порядке C
, F
или A
я использую с reshape , Я не могу получить требуемое выравнивание.
Я использую эти тестовые данные.
import pandas as pd
import numpy as np
from random import seed, randint
# Data
n_rows = 4
start = '2020-01-01 00:00+00:00'
end = '2020-01-01 12:00+00:00'
pr2h = pd.period_range(start=start, end=end, freq='2h')
seed(1)
values1 = [randint(0,10) for ts in pr2h]
values2 = [randint(20,30) for ts in pr2h]
df = pd.DataFrame({'Values1' : values1, 'Values2': values2}, index=pr2h)
# Processing
array = np.concatenate((np.full((n_rows-1,len(df.columns)), np.nan), df), axis=0)
array = array.T
shape = array.shape[:-1] + (array.shape[-1] - n_rows + 1, n_rows)
strides = array.strides + (array.strides[-1],)
array = np.lib.stride_tricks.as_strided(array, shape=shape, strides=strides)
transposed = np.concatenate(array, axis=1) # -> the line of code I would like to change
Итак, из-за обработки с помощью strides
я получаю array
как показано ниже.
array([[[nan, nan, nan, 2.],
[nan, nan, 2., 9.],
[nan, 2., 9., 1.],
[ 2., 9., 1., 4.],
[ 9., 1., 4., 1.],
[ 1., 4., 1., 7.],
[ 4., 1., 7., 7.]],
[[nan, nan, nan, 27.],
[nan, nan, 27., 30.],
[nan, 27., 30., 26.],
[27., 30., 26., 23.],
[30., 26., 23., 21.],
[26., 23., 21., 27.],
[23., 21., 27., 20.]]])
Благодаря np.concatenate(array, axis=1)
я получил форму и порядок значений, которые искал, в transposed
.
array([[nan, nan, nan, 2., nan, nan, nan, 27.],
[nan, nan, 2., 9., nan, nan, 27., 30.],
[nan, 2., 9., 1., nan, 27., 30., 26.],
[ 2., 9., 1., 4., 27., 30., 26., 23.],
[ 9., 1., 4., 1., 30., 26., 23., 21.],
[ 1., 4., 1., 7., 26., 23., 21., 27.],
[ 4., 1., 7., 7., 23., 21., 27., 20.]])
Есть ли способ получить та же форма и порядок значений без создания копии массива?
Заранее благодарю вас за любую помощь. Бест,