如何使数组具有相同的长度

时间:2018-03-21 17:37:57

标签: python arrays numpy

我有一个包含带密钥哈希的pickle文件 - >名单 像这样

h = { 'two': [1,2], 'three': [3,4,5]}

我想将数组转换为数组数组,使数组长度相同(只为较短的数组填充零)

所以上面的例子我希望得到像这样的结果

>>> np.asarray([[1,2,0],[3,4,5]])
array([[1, 2, 0],
       [3, 4, 5]])

(我不关心哈希中的键,我也不关心数组的顺序)。

第一步是找到最长的数组,我认为这段代码会为我做的

m = max(map(len, h.values()))

但是之后如何创建数组呢? 我认为numpy.copyto()是可能的; 将原始数组复制到一个填充了零和新长度的新数组中,但它需要相同形状的数组。

1 个答案:

答案 0 :(得分:2)

因为你从字典开始,所以这不太可能从numpy矢量化中受益;因此,解决方案将是裸循环,您可以padnumpy方式np.pad归零:

np.array([np.pad(v, (0, m - len(v)), 'constant') for v in h.values()])
#array([[1, 2, 0],
#       [3, 4, 5]])

或香草列表方式:

np.array([v + [0] * (m - len(v)) for v in h.values()])
#array([[1, 2, 0],
#       [3, 4, 5]])