用零矢量填充空列表使用numpy

所以这就是事情 . 我有一个列表列表,一些列表是空的...但如果它不是空的..所有列表都是固定长度..我不知道的长度..例如

for feature in features:
     print len(feature)

这将打印0或长度k .

我正在尝试编写一个函数

def generate_matrix(features):
     # return matrix

返回一个numpy矩阵..空行替换为零向量 . 有没有办法有效地做到这一点?我的意思是......我不想循环通过找到矩阵的形状,然后再循环通过生成行(使用np.array(feature)或np.zeros(shape)..

回答(1)

2 years ago

编辑:我没有意识到所有非空功能都是相同的长度 . 如果是这种情况,那么您可以使用第一个非零值的长度 . 我添加了一个功能 .

f0 = [0,1,2]
f1 = []
f2 = [4,5,6]

features = [f0, f1, f2]

def get_nonempty_len(features):
    """
    returns the length of the first non-empty element
        of features.     
    """
    for f in features:
        if len(f) > 0:
            return len(f)
    return 0

def generate_matrix(features):
    rows = len(features)
    cols = get_nonempty_len(features)
    m = np.zeros((rows, cols))
    for i, f in enumerate(features):
        m[i,:len(f)]=f
    return m

print(generate_matrix(features))

输出如下:

[[ 0.  1.  2.]
 [ 0.  0.  0.]
 [ 4.  5.  6.]]