gpt4 book ai didi

python - 如何 reshape numpy 数组并保留每个第 n 个元素

转载 作者:行者123 更新时间:2023-11-30 22:15:16 25 4
gpt4 key购买 nike

我有一个形状的 numpy 数组,例如 (1000, 80),我想将其转换为 (100, 40, 2)。您可以将其视为具有 1000 个观测值,其中前 40 列指的是 40 天内的特定特征,接下来的 40 列指的是同一 40 天内的第二个特征。

所以,我希望第二个维度是 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]]])

最佳答案

您可以先 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]]])

互换:

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 评论的那样,使用 column-major 顺序reshape:

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

关于python - 如何 reshape numpy 数组并保留每个第 n 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50334091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com