代码之家  ›  专栏  ›  技术社区  ›  duhaime

Numpy:内部尺寸不同的堆栈数组

  •  0
  • duhaime  · 技术社区  · 6 年前

    我的情况类似于:

    import numpy as np
    
    a = np.random.rand(55, 1, 3)
    b = np.random.rand(55, 626, 3)
    

    在这里,形状表示观察的数量,然后是每个观察的时间片数量,然后是给定时间片上观察的维度数量。所以b是一个新的时间间隔内55个观测值中每一个的3个维度的完整表示。

    55, 627, 3 . 一个人怎样才能在numpy做到这一点?如有任何建议,将不胜感激!

    1 回复  |  直到 6 年前
        1
  •  1
  •   duhaime    6 年前

    为了跟进上面Divakar的回答 axis numpy中的参数是数组形状中给定维度的索引。我要在这里堆叠 a b 根据它们的中间形状值,即在索引=1时:

    import numpy as np
    
    a = np.random.rand(5, 1, 3)
    b = np.random.rand(5, 100, 3)
    
    # create the desired result shape: 55, 627, 3
    stacked = np.concatenate((b, a), axis=1)
    
    # validate that a was appended to the end of b
    print(stacked[:, -1, :], '\n\n\n', a.squeeze())
    

    [[0.72598529 0.99395887 0.21811998]
     [0.9833895  0.465955   0.29518207]
     [0.38914048 0.61633291 0.0132326 ]
     [0.05986115 0.81354865 0.43589306]
     [0.17706517 0.94801426 0.4567973 ]] 
    
    
     [[0.72598529 0.99395887 0.21811998]
     [0.9833895  0.465955   0.29518207]
     [0.38914048 0.61633291 0.0132326 ]
     [0.05986115 0.81354865 0.43589306]
     [0.17706517 0.94801426 0.4567973 ]]
    

    纯粹主义者可以用 np.all(stacked[:, -1, :] == a.squeeze())

    严格地说,对于好奇的人来说,这种连接的用例是一种不稳定的长-短记忆神经网络的数据准备管道。在这种网络中,训练数据的形状应该是 number_of_observations, number_of_time_intervals, number_of_dimensions_per_observation . 我在一个新的时间间隔内对每一个物体产生新的预测,所以这些预测是有形状的 number_of_observations, 1, number_of_dimensions_per_observation