我有一个任意长度的向量,我想将其重塑为一个正方形矩阵,如下所示:

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)之类的参数。有没有一种方法可以产生方形矩阵的效果。谢谢。

最佳答案

在重塑之前或之后,您必须填充阵列。

例如,使用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]])

无论如何,在一个调用中没有一个函数可以完成所有这些操作-至少我不知道。这不是足够常见的操作。

关于python - 在numpy中将任意长度的矢量整形为方矩阵,并填充,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41176248/

10-12 17:57
查看更多