从不同长度的数组创建一个ndarray

时间:2015-11-03 12:59:48

标签: python arrays numpy

如何从不同长度的(1D-)数组中优雅地创建NumPy ndarray,填充余数?

阵列总是1D,它们具有不同的长度(最大长度在20到100之间变化)。

说有

a = range(40)
b = range(30)

结果ndarray应为

X = [[0,1,2,3,...,39,40],
     [0,1,2,...29,30,0,0,...,0]]

Hacky解决方案

创建中介

I = [a,b]

并通过

填充到maximum
I[1].extend([0] * (maximum - len(I[1])))

然后可以通过

转换
X = np.array(I)

有效,但没有内置/可通过PyPI /更多pythonic?

1 个答案:

答案 0 :(得分:1)

您可以创建一个零(np.zeros)数组,然后用ab替换行。不确定这比你的方式更好

In [27]: a=range(40)

In [28]: b=range(30)

In [29]: x=np.zeros((2,max(len(a),len(b))))

In [30]: for i,j in enumerate([a,b]): x[i][:len(j)]=j

In [31]: x
Out[31]: 
array([[  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.,
         11.,  12.,  13.,  14.,  15.,  16.,  17.,  18.,  19.,  20.,  21.,
         22.,  23.,  24.,  25.,  26.,  27.,  28.,  29.,  30.,  31.,  32.,
         33.,  34.,  35.,  36.,  37.,  38.,  39.],
       [  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.,
         11.,  12.,  13.,  14.,  15.,  16.,  17.,  18.,  19.,  20.,  21.,
         22.,  23.,  24.,  25.,  26.,  27.,  28.,  29.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.]])