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]))
            ))

これにより、マトリックスが希望どおりに中央に配置されないことに注意してください。ただし、それほど難しくはありません。(タプルに 2 つではなく 3 つの配列を入れて連結します。

于 2015-12-14T10:05:00.600 に答える