Python Numpy从大小不规则的数据创建数组

Python Numpy从大小不规则的数据创建数组,python,numpy,multidimensional-array,Python,Numpy,Multidimensional Array,我有不同大小的列表,比如 a = [1,2,3] b = [4,5] 我想用这些值创建一个二维数组,并在短列表中没有可用数据的地方创建一个默认值 c = do_something_with_a_b() In: c Out: array([[1,2,3], [4,5, DEFAULT_VALUE]]) 目前我使用以下方法,但我认为这太复杂了: all_ar = [] all_ar.append(a) all_ar.append(b) # Get the size o

我有不同大小的列表,比如

a = [1,2,3]
b = [4,5]
我想用这些值创建一个二维数组,并在短列表中没有可用数据的地方创建一个默认值

c = do_something_with_a_b()
In: c 
Out: array([[1,2,3],
            [4,5, DEFAULT_VALUE]]) 
目前我使用以下方法,但我认为这太复杂了:

all_ar = []
all_ar.append(a)
all_ar.append(b)
# Get the size of all arrays for masking
len_ar = np.array([array.size for array in all_ar])
# Create a mask according to the length of the arrays
mask = np.arange(len_ar.max()) < len_ar[:,None]
# Create an array filled with the default value, here -1
c = np.full(mask.shape, -1, dtype='int')
# Use the mask to overwrite the the default values with the 
# data from the arrays 
c[mask] = np.concatenate(all_ar)
In: c
Out: array([[1,2,3],
            [4,5,-1]]) 
all_ar=[]
所有附录(a)
所有附件(b)
#获取用于掩蔽的所有数组的大小
len_ar=np.array([array.size用于所有_ar中的数组])
#根据阵列的长度创建遮罩
mask=np.arange(len_ar.max())
是否有更简单的方法将不规则大小的列表转换为具有规则形状和缺失数据点处的默认值的numpy数组?

您可以使用
numpy
中的函数:

import numpy as np

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

# To what length do we need to pad?
max_len = np.array([len(array) for array in a]).max()

# What value do we want to fill it with?
default_value = 0

b = [np.pad(array, (0, max_len - len(array)), mode='constant', constant_values=default_value) for array in a]
b
代码在做什么?

pad
(0,max_len-len(array))
参数表示我们要添加
0
列和
max_len-len(array)
行,以确保数组与数据集中最大的数组匹配