将元组列表转换为 3d numpy 数组

问题描述 投票:0回答:3

我有一个数据集,它是一个元组列表,我需要将其转换为 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 库实现此目的?

python arrays list numpy tuples
3个回答
0
投票

遍历每个值,并重构你的列表:

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]]]]

0
投票

我认为这样做并存储在 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]]])

你可以随心所欲地操作


0
投票

应用

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]]])]
© www.soinside.com 2019 - 2024. All rights reserved.