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

时间:2018-04-11 13:31:37

标签: 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 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]]) 

是否有更简单的方法将不规则大小的列表转换为具有常规形状的numpy数组和缺少数据点的默认值?

1 个答案:

答案 0 :(得分:0)

您可以使用Tab中的pad功能:

text

代码在做什么?

numpy的{​​{1}}参数表示我们要添加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 列和(0, max_len - len(array))行,以确保数组与数据集中的最大数组匹配。