我有一个任意长度的矢量,我想将它重塑成方形矩阵,如:
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)。有没有办法产生方形矩阵的效果。谢谢。
答案 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]])
在任何情况下,没有一个功能可以在一次通话中完成所有这些操作 - 至少不是我所知道的。这不是一个常见的操作。