Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python/Numpy-如何在不连接的情况下将这个(2,7,4)ndarray重塑为(7,8)ndarray?_Python_Arrays_Numpy - Fatal编程技术网

Python/Numpy-如何在不连接的情况下将这个(2,7,4)ndarray重塑为(7,8)ndarray?

Python/Numpy-如何在不连接的情况下将这个(2,7,4)ndarray重塑为(7,8)ndarray?,python,arrays,numpy,Python,Arrays,Numpy,我目前正在使用np.concatenate将a(n_列,n_行,n_位置)ndarray重塑为a(n_行,n_列*n_位置)ndarray 因为np.concatenate首先复制,而且数据是“连续的”,所以我想知道是否没有更快速的方法通过重塑来获得我正在寻找的数组 但是,无论我在重塑中使用的是C、F还是A顺序,我都无法获得我想要的对齐方式 我正在使用这个测试数据 import pandas as pd import numpy as np from random import seed, ra

我目前正在使用
np.concatenate
将a(n_列,n_行,n_位置)
ndarray
重塑为a(n_行,n_列*n_位置)
ndarray

因为
np.concatenate
首先复制,而且数据是“连续的”,所以我想知道是否没有更快速的方法通过重塑来获得我正在寻找的数组

但是,无论我在重塑中使用的是
C
F
还是
A
顺序,我都无法获得我想要的对齐方式

我正在使用这个测试数据

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
因此,由于使用
步长
进行处理,我得到
数组
,如下所示

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)
,我得到了我在
转置中寻找的形状和值顺序

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.]])
有没有一种方法可以在不复制数组的情况下获得相同的形状和值顺序

我提前感谢你的帮助。最好的,试试这个:

np.reshape(np.transpose(array,(1,0,2)),(7,8))

Swapax或转置得到一个(7,2,4),然后重塑。非常感谢,太棒了!