1

我有一个矩阵列表,其中一些的高度(.shape[0])比其他的要大,我想让它们都处于相同的高度。所以我想找到最大矩阵的高度,然后用差值填充其余矩阵,使 amtrix 的内容保持在中间。(如果差异甚至没有,那么添加到底部比顶部多一行。这是我到目前为止的代码:

def equalize_heights(matrices,maxHeight):
    newMatrices = []
    matricesNum = len(matrices)
    for i in xrange(matricesNum):
        matrixHeight = matrices[i].shape[0]
        if (matrixHeight == maxHeight):
            newMatrices.append(matrices[i])
        else:
            addToTop = (maxHeight-matrixHeight)/2
            addToBottom = (maxHeight-matrixHeight)/2 +((maxHeight-matrixHeight)%2)

现在,没有最大矩阵那么高的矩阵应该将“addToTop”行添加到矩阵顶部(行填充为 0)和“addToBottom”行添加到底部。

我想我应该使用 numpy.pad 功能,但我不明白到底是怎么回事。

4

1 回答 1

0

请记住,np.pad每个维度的焊盘,而不仅仅是高度。考虑np.concatenate改用。另请注意,您不需要传递最大高度 - 您的函数可以自己计算。

例如:

import numpy as np
matrices = [np.array([[1,2], [1,2]]), np.array([[1,2], [1,2], [1,2]])]
def equalize_heights(matrices):
    max_height = matrices[0].shape[0]

    for matrix in matrices[1:]:
        max_height = max(max_height, matrix.shape[0])

    for idx, matrix in enumerate(matrices):
        matrices[idx] = np.concatenate((
            matrix,
            np.zeros((max_height - matrix.shape[0], matrix.shape[1]))
            ))

请注意,这不会以您想要的方式使您的矩阵居中,但这应该不会太难。(将三个数组放在元组中进行连接,而不是两个。

于 2015-12-14T10:05:00.600 回答