如何重塑numpy数组保持每个第n个元素

时间:2018-05-14 15:34:16

标签: python numpy

我有一个numpy形状的数组,比如(1000, 80),我想把它转换为(100, 40, 2)。您可以将其视为具有1000个观察值,其中前40列在40天内引用特定特征,而接下来的40列在相同的40天内引用第2个特征。

所以,我希望第二个维度是40天,而第三个维度应该是每天这两个特征的值。

以下是我尝试过的一个简单示例:

import numpy as np

data = [[11, 22, 33, 44],
        [55, 66, 77 ,88],
        [99, 100, 101, 102]]
data = np.array(data)

# This works but I have to manually do it for every day
np.c_[data[:, ::2], data[:, 1::2]].reshape((3, 2, 2))

# This does not work
np.c_[data[:, i::2] for i in range(2)].reshape((3, 2, 2))

期望的输出:

array([[[ 11,  33],
    [ 22,  44]],
    [[ 55,  77],
     [ 66,  88]],
    [[ 99, 101],
     [100, 102]]])

1 个答案:

答案 0 :(得分:3)

您可以先reshape然后转置第二和第三轴:

data.reshape(-1, 2, data.shape[1] / 2).transpose(0,2,1)
#array([[[ 11,  33],
#        [ 22,  44]],

#       [[ 55,  77],
#        [ 66,  88]],

#       [[ 99, 101],
#        [100, 102]]])

swapaxes

data.reshape(-1, 2, data.shape[1] / 2).swapaxes(1,2)
#array([[[ 11,  33],
#        [ 22,  44]],

#       [[ 55,  77],
#        [ 66,  88]],

#       [[ 99, 101],
#        [100, 102]]])

或@wwii评论,reshape column-major订单:

data.reshape(-1, data.shape[1] / 2, 2, order='F')