我有一个数据集,它是一个元组列表,我需要将其转换为 3d numpy 数组。举个例子:
data = [(1, 65, -18, -1, -1 ),
(1, -18,-1, -1,-1),
(2, 65, -19, -1, -1),
(2, 65, -18, -1, -1),
(3, 62, -18, -1, -1)]
我想像这样创建一个 3d numpy 数组:
array[[[[65], [-18], [-1], [-1]],
[[-18], [-1], [-1], [-1]]],
[[[65], [-19], [-1], [-1]],
[[65], [-18], [-1], [-1]]],
[[[62], [-18], [-1], [-1]]]]
如何使用 Numpy 库实现此目的?
遍历每个值,并重构你的列表:
data = [(1, 65, -18, -1, -1 ),
(1, -18,-1, -1),
(2, 65, -19, -1, -1),
(2, 65, -18, -1, -1),
(3, 62, -18, -1, -1)]
[[[[val] for val in row[1:]] for row in data]]
输出:
[[[[65], [-18], [-1], [-1]],
[[-18], [-1], [-1]],
[[65], [-19], [-1], [-1]],
[[65], [-18], [-1], [-1]],
[[62], [-18], [-1], [-1]]]]
我认为这样做并存储在 numpy 数组中的一种简短方法是
import numpy as np
data = [(1, 65, -18, -1, -1 ),
(1, 65, -18,-1, -1),
(2, 65, -19, -1, -1),
(2, 65, -18, -1, -1),
(3, 62, -18, -1, -1)]
numpy_data = np.array(data)[:,1:].reshape((5,4,1))
numpy_data
输出
array([[[ 65],
[-18],
[ -1],
[ -1]],
[[ 65],
[-18],
[ -1],
[ -1]],
[[ 65],
[-19],
[ -1],
[ -1]],
[[ 65],
[-18],
[ -1],
[ -1]],
[[ 62],
[-18],
[ -1],
[ -1]]])
你可以随心所欲地操作
应用
np.unique
+ np.split
的组合,根据初始 arr
的第一列中包含的“id”获得数组组:
arr = np.asarray(data)
groups = np.split(arr[:, 1:], np.unique(arr[:, 0], return_index=True)[1])[1:]
groups = [a.reshape(-1, a.shape[1], 1) for a in groups]
print(groups)
[array([[[ 65],
[-18],
[ -1],
[ -1]],
[[-18],
[ -1],
[ -1],
[ -1]]]), array([[[ 65],
[-19],
[ -1],
[ -1]],
[[ 65],
[-18],
[ -1],
[ -1]]]), array([[[ 62],
[-18],
[ -1],
[ -1]]])]