我有一个任意长度的向量,我想把它改造成一个方阵,比如:
np.arange(6).reshape((3, 3))
[1,2,x] [1,2,3]
[3,4,x] [4,5,6]
[5,6,x] [x,x,x]
Run Code Online (Sandbox Code Playgroud)
的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]])
Run Code Online (Sandbox Code Playgroud)
该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]])
Run Code Online (Sandbox Code Playgroud)
无论如何,没有一个函数可以在一次调用中完成所有这些操作——至少我不知道。这不是一个足够常见的操作。
您可以定义最近的正方形,然后将数组带到它并重塑
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11315 次 |
| 最近记录: |