方陣填充予具有任意長度矢量,並且我想把它重塑成正方形矩陣,是這樣的:整形任意長度載體導入在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)這樣的參數。有沒有辦法產生方形矩陣的效果。謝謝。
方陣填充予具有任意長度矢量,並且我想把它重塑成正方形矩陣,是這樣的:整形任意長度載體導入在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)這樣的參數。有沒有辦法產生方形矩陣的效果。謝謝。
你必須墊陣列,之前或之後重塑。
例如,使用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]])
在任何情況下,都沒有一個函數在一次調用中完成所有這些 - 至少不是我所知道的。這不是一個常見的操作。
可以定義最接近的廣場,然後陣列攜帶它,重塑
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)
什麼定義了正方形的形狀?我也可以將它放入7x7中 – percusse
是的,它可以完成。但矩陣的每個維度都將接近矢量長度的平方根。 – motiur