3D numpy 重新排列

问题描述

# pre-allocate data cube
cube = np.empty((len(time_ix),len(data_ix),len(id_ix)))
cube[:] = np.NaN
# filling of cube
tix=3
idx=5
data = cube[tix,:,idx]

数据大致描述了该 id 当天的 20 列值

我正在创建一个多维数据集,以便在之后更好地切片我的数据,不幸的是,通过使用这样的语句,我可以用数据类型仅为 float64 的数据填充我的第二维,这在存储方面变得非常昂贵。 我没有找到将上述多维数据集声明为 rec 数组的方法,这样我就可以适应 data_ix 维异构数据类型。

或者,有没有办法用 2 个索引来表示 3d 数组(立方体)以轻松切片(时间和 id)以获取带有 Pandas 数据帧的相应数据集?

解决方法

IIUC:

使用二维记录数组

x = np.array([[(1.0,2),(3.0,4)],[(0.0,1),(7.0,5)]],dtype=[('x','<f8'),('y','<i8')])

然后

x['x']

array([[1.,3.],[0.,7.]])

同时给出一个浮点数组

x['y']

array([[2,4],[1,5]],dtype=int64)

给出一个整数数组