将任意长度向量重塑为方形矩阵,并在numpy中填充

时间:2016-12-16 02:09:06

标签: python numpy

我有一个任意长度的矢量,我想将它重塑成方形矩阵,如:

np.arange(6).reshape((3, 3))

[1,2,x]   [1,2,3]    
[3,4,x]   [4,5,6]
[5,6,x]   [x,x,x] 

x可以水平和/或垂直放置。

显然reshape函数只允许上例中的参数如(3,2)。有没有办法产生方形矩阵的效果。谢谢。

2 个答案:

答案 0 :(得分:2)

您可以定义最近的方块,然后将数组带到它并重新整形

import numpy as np
n = np.random.randint(10, 200)
a = np.arange(n)
ns = np.ceil(np.sqrt(n)).astype(int)
s = np.zeros(ns**2)
s[:a.size] = a
s = s.reshape(ns,ns)

答案 1 :(得分:2)

您必须在重塑之前或之后填充数组。

例如,使用resize方法添加所需的0:

In [409]: x=np.arange(6)
In [410]: x.resize(3*3)
In [411]: x.shape
Out[411]: (9,)
In [412]: x.reshape(3,3)
Out[412]: 
array([[0, 1, 2],
       [3, 4, 5],
       [0, 0, 0]])

np.resize复制值。 np.pad对于添加0也很方便,但它可能有点过分。

使用np.arange(6)我们可以在重塑之前或之后填充。使用np.arange(5)我们必须坚持使用,因为填充将是不规则的。

In [409]: x=np.arange(6)
In [410]: x.resize(3*3)
In [411]: x.shape
Out[411]: (9,)
In [412]: x.reshape(3,3)
Out[412]: 
array([[0, 1, 2],
       [3, 4, 5],
       [0, 0, 0]])

在任何情况下,没有一个功能可以在一次通话中完成所有这些操作 - 至少不是我所知道的。这不是一个常见的操作。