python - 将列表转换并填充到 numpy 数组

标签 python arrays numpy

我有一个任意深度嵌套的列表,元素的长度各不相同

my_list = [[[1,2],[4]],[[4,4,3]],[[1,2,1],[4,3,4,5],[4,1]]]

我想通过用 NaN 填充每个轴将其转换为有效的数字(非对象)numpy 数组。所以结果应该是这样的

padded_list = np.array([[[  1,   2, nan, nan],
                         [  4, nan, nan, nan],
                         [nan, nan, nan, nan]],
                        [[  4,   4,   3, nan],
                         [nan, nan, nan, nan],
                         [nan, nan, nan, nan]],
                        [[   1,  2,   1, nan],
                         [   4,  3,   4,   5],
                         [   4,  1, nan, nan]]])

我该怎么做?

最佳答案

这适用于您的示例,但不确定它能否正确处理所有极端情况:

from itertools import izip_longest

def find_shape(seq):
    try:
        len_ = len(seq)
    except TypeError:
        return ()
    shapes = [find_shape(subseq) for subseq in seq]
    return (len_,) + tuple(max(sizes) for sizes in izip_longest(*shapes,
                                                                fillvalue=1))

def fill_array(arr, seq):
    if arr.ndim == 1:
        try:
            len_ = len(seq)
        except TypeError:
            len_ = 0
        arr[:len_] = seq
        arr[len_:] = np.nan
    else:
        for subarr, subseq in izip_longest(arr, seq, fillvalue=()):
            fill_array(subarr, subseq)

现在:

>>> arr = np.empty(find_shape(my_list))
>>> fill_array(arr, my_list)
>>> arr
array([[[  1.,   2.,  nan,  nan],
        [  4.,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan]],

       [[  4.,   4.,   3.,  nan],
        [ nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan]],

       [[  1.,   2.,   1.,  nan],
        [  4.,   3.,   4.,   5.],
        [  4.,   1.,  nan,  nan]]])

我认为这大致就是 numpy 的形状发现例程所做的。由于无论如何都涉及大量 Python 函数调用,因此与 C 实现相比,它可能不会那么糟糕。

关于python - 将列表转换并填充到 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27890052/

相关文章:

python - 在 scipy 中创建新的发行版

python - 在python中计算表面拟合后3D偏差的均方根

python - 为 matplotlib tricontourf 设置掩码

python - 如何使用Parts-of-Speech来评估语义文本相似度?

python - 如何将代码块聚类为级别 (Python)

c - 使用声明的变量初始化数组

php - 在分辨率数组中找到具有最接近宽高比的最接近的较大分辨率

python - 如何使用 c 代码或 python 检查 gnome key 环状态?

javascript - 查找数组中的键

python - numpy 直方图数组