一般に、任意のサイズの行列を持つことができます。私のアプリケーションでは、正方行列が必要です。また、ダミー エントリには指定された値が必要です。numpyに何かが組み込まれているのだろうか?
またはそれを行う最も簡単な方法
編集 :
行列 X は既に存在し、2 乗されていません。値をパディングして正方形にします。ダミーの与えられた値でパディングします。元の値はすべて同じままです。
どうもありがとう
Numpy 1.7 以降、numpy.pad
関数があります。次に例を示します。
>>> x = np.random.rand(2,3)
>>> np.pad(x, ((0,1), (0,0)), mode='constant', constant_values=42)
array([[ 0.20687158, 0.21241617, 0.91913572],
[ 0.35815412, 0.08503839, 0.51852029],
[ 42. , 42. , 42. ]])
2D numpy配列の場合、対応する(つまり)のスライスをに等しく設定する前に、1のx配列をm
作成し、これに目的のパディング値を掛けることで、これを簡単に行うことができます。max(m.shape)
max(m.shape)
p
p
m
p[0:m.shape[0], 0:m.shape[1]]
m
これにより、次の関数が生成されます。最初の行は、入力に1つの次元しかない(つまり、行列ではなく配列である)可能性を扱います。
import numpy as np
def pad_to_square(a, pad_value=0):
m = a.reshape((a.shape[0], -1))
padded = pad_value * np.ones(2 * [max(m.shape)], dtype=m.dtype)
padded[0:m.shape[0], 0:m.shape[1]] = m
return padded
したがって、たとえば:
>>> r1 = np.random.rand(3, 5)
>>> r1
array([[ 0.85950957, 0.92468279, 0.93643261, 0.82723889, 0.54501699],
[ 0.05921614, 0.94946809, 0.26500925, 0.02287463, 0.04511802],
[ 0.99647148, 0.6926722 , 0.70148198, 0.39861487, 0.86772468]])
>>> pad_to_square(r1, 3)
array([[ 0.85950957, 0.92468279, 0.93643261, 0.82723889, 0.54501699],
[ 0.05921614, 0.94946809, 0.26500925, 0.02287463, 0.04511802],
[ 0.99647148, 0.6926722 , 0.70148198, 0.39861487, 0.86772468],
[ 3. , 3. , 3. , 3. , 3. ],
[ 3. , 3. , 3. , 3. , 3. ]])
また
>>> r2=np.random.rand(4)
>>> r2
array([ 0.10307689, 0.83912888, 0.13105124, 0.09897586])
>>> pad_to_square(r2, 0)
array([[ 0.10307689, 0. , 0. , 0. ],
[ 0.83912888, 0. , 0. , 0. ],
[ 0.13105124, 0. , 0. , 0. ],
[ 0.09897586, 0. , 0. , 0. ]])
等