7

一般来说,我们可以有任意大小的矩阵。对于我的应用程序,必须有方阵。虚拟条目也应该有一个指定的值。我想知道numpy是否有内置的东西?

或者最简单的方法

编辑 :

矩阵 X 已经存在并且它不是平方的。我们想要填充该值以使其成为正方形。用虚拟给定值填充它。所有原始值将保持不变。

非常感谢

4

3 回答 3

8

基于 LucasB 的答案,这里有一个函数,它将M用给定的值填充任意矩阵val,使其变为正方形:

def squarify(M,val):
    (a,b)=M.shape
    if a>b:
        padding=((0,0),(0,a-b))
    else:
        padding=((0,b-a),(0,0))
    return numpy.pad(M,padding,mode='constant',constant_values=val)
于 2017-08-31T20:38:56.797 回答
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 数组m,通过创建一个max(m.shape)xmax(m.shape)数组p并将其乘以所需的填充值,在将p对应于m(ie p[0:m.shape[0], 0:m.shape[1]]) 的切片设置为等于之前,这很简单m

这导致以下函数,其中第一行处理输入只有一个维度的可能性(即是数组而不是矩阵):

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 回答