将不同长度的列表列表转换为 numpy 数组

新手上路,请多包涵

我有不同长度的列表列表(例如 [[1, 2, 3], [4, 5], [6, 7, 8, 9]] )并想将其转换为 numpy 整数数组。我知道 numpy 多维数组中的“子”数组必须具有相同的长度。那么,将上面示例中的此类列表转换为 numpy 这样的数组的最有效方法是什么 [[1, 2, 3, 0], [4, 5, 0, 0], [6, 7, 8, 9]] ,即用零完成?

原文由 Dimansel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

您可以使用 np.zeros 创建一个 numpy 数组,并用您的列表元素填充它们,如下所示。

 a = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
import numpy as np
b = np.zeros([len(a),len(max(a,key = lambda x: len(x)))])
for i,j in enumerate(a):
    b[i][0:len(j)] = j

结果是

[[ 1.  2.  3.  0.]
 [ 4.  5.  0.  0.]
 [ 6.  7.  8.  9.]]

原文由 plasmon360 发布,翻译遵循 CC BY-SA 3.0 许可协议

在转换为 numpy 数组之前,通过填充较短的子列表对列表进行一些预处理:

 >>> lst = [[1, 2, 3], [4, 5], [1, 7, 8, 9]]
>>> pad = len(max(lst, key=len))
>>> np.array([i + [0]*(pad-len(i)) for i in lst])
array([[1, 2, 3, 0],
       [4, 5, 0, 0],
       [1, 7, 8, 9]])

原文由 Moses Koledoye 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题