我有一个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]]])
答案 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')