Skip to main content
 首页 » 编程设计

python之将字典转换为 numpy 多维数组

2025年05月04日11langtianya

我有一个 python 字典定义如下,其中最里面的项目是二元数组:

    mydict = {1: {1: [1, 2], 2: [3, 4]}, 2: {1: [5, 6], 2: [7, 8]}} 

我现在需要的是将所有第 0 个元素组成一个新数组,即使用 a[:,:,0] 或 a[...,0] 返回 [1,3,5,6] .但是,a[:,:,0] 或 a[...,0] 在这种情况下不起作用,如下所示。

    import numpy as np 
    import pandas as pd 
    a = np.array(pd.DataFrame.from_dict(mydict)) 
    print a 

给出以下输出:

    [[[1, 2] [5, 6]] 
     [[3, 4] [7, 8]]] 

看起来这是一个2x2x2的数组。使用单独的括号访问相应的元素没有问题,例如,a[0][0][0] 返回 1。但是,a[0,0,0] 会导致错误。

    --------------------------------------------------------------------------- 
    IndexError                                Traceback (most recent call last) 
    <ipython-input-150-f68aba7de42a> in <module>() 
    ----> 1 a[0,0,0] 
 
    IndexError: too many indices for array 

似乎双元素数组被视为 2x2 数组中的元素——但我需要的是 2x2x2 数组才能实现我的目标。有没有办法将其转换为 2x2x2 数组?

请您参考如下方法:

您的问题来自以下事实:pandas 将您的初始条目(列表)视为对象,因此当您转换为 numpy 数组时,您最里面的条目是列表对象。例如,

> type(a) 
numpy.ndarray 
> type(a[0]) 
numpy.ndarray 
> type(a[0,0]) 
list 

如果您知道最终想要的形状 (2x2x2),您总是可以这样做:

> b = np.array(map(np.array, a.flat)).reshape(2,2,2) 
> b.shape 
(2, 2, 2) 
> b[0,0,0] 
1 

编辑:或者更简单:

> b = np.array(a.tolist()) 
array([[[1, 2], 
        [5, 6]], 
 
       [[3, 4], 
        [7, 8]]]) 

如果你想要每个最里面行的第一项,例如1,3,5,7,你可以做 b[...,0] 或 b[...,0].flatten() 取决于结果你想要的形状。