【问题标题】:Flatten incremental numpy values with wrong shape用错误的形状展平增量 numpy 值
【发布时间】:2021-02-01 12:38:16
【问题描述】:

我在一个长的 numpy 数组中进行了 25 年的每小时采样,形状为 (365, 24, 25)。 这是从 1975-01-01 00:00:00 到 1999-12-31 23:59:00 的数据

[[[0, 0.1, 0.2, ...], [0.3, 0.2, 0.2, ...], ...]]

现在我想将其展平为尺寸 (1x219000),然后将它们放入如下所示的数据框中:

1975-01-01 00:00:00    0
1975-01-01 02:00:00    0.1
1975-01-01 03:00:00    0.2
1975-01-02 01:00:00    0.2

我只是试着把它弄平:

data1d = data.flatten()
df = pd.DataFrame(oneDimensionalData)

df.index = pd.date_range(start=pd.to_datetime('1975-01-01 00:00:00'), end=pd.to_datetime("1999-12-31 23:59:00"), periods=219000).to_series()

它产生了所需的向量,但我认为顺序是错误的,并且自 1975 年以来就不是连续时间。

在展平这些 3D 矩阵方面有更多经验的人知道如何做吗?

【问题讨论】:

    标签: python pandas matlab numpy


    【解决方案1】:

    使用np.transpose() 重新排列尺寸。

    import numpy as np
    
    # test data in ydh ordering
    data_ydh = np.array(range(365*24*25)).reshape((25,365,24))
    data_ydh[0,0,:]  # check y=d=0, the first 24 hours
    Out[43]:
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
           17, 18, 19, 20, 21, 22, 23])
    
    # ydh to dhy
    data_dhy = data_ydh.transpose((1,2,0))
    data_dhy[0,:,0]  # d=0 and y=0
    Out[47]:
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
           17, 18, 19, 20, 21, 22, 23])
    
    # dhy to ydh
    data_ydh_back = data_dhy.transpose((2,0,1))
    data_ydh_back[0,0]
    Out[49]:
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
           17, 18, 19, 20, 21, 22, 23])
    

    【讨论】:

    • 非常感谢。对于以后看这个的人:在 Matlab 中可以用 permute 来完成(比如这里的转置)
    猜你喜欢
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 2021-01-13
    • 1970-01-01
    相关资源
    最近更新 更多