gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:43:00 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com