7

一般に、任意のサイズの行列を持つことができます。私のアプリケーションでは、正方行列が必要です。また、ダミー エントリには指定された値が必要です。numpyに何かが組み込まれているのだろうか?

またはそれを行う最も簡単な方法

編集 :

行列 X は既に存在し、2 乗されていません。値をパディングして正方形にします。ダミーの与えられた値でパディングします。元の値はすべて同じままです。

どうもありがとう

4

3 に答える 3

4

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.        ]])
于 2015-03-04T21:50:11.140 に答える
3

2D numpy配列の場合、対応する(つまり)のスライスをに等しく設定する前に、1のx配列をm作成し、これに目的のパディング値を掛けることで、これを簡単に行うことができます。max(m.shape)max(m.shape)ppmp[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.        ]])

于 2012-08-01T16:43:26.253 に答える