有沒有一種聰明的方法來遞回生成 numpy 中大小不斷增加的矩陣?我確實有一個生成器矩陣,它是
g = np.array([[1, 0], [1, 1]])
并且在每次進一步迭代中,兩個軸的大小都加倍,形成一個新的格式矩陣:
[g_{n-1}, 0], [g_{n-1}, g_{n-1}]
這意味著新版本將是:
g = np.array([[1, 0, 0, 0], [1, 1, 0, 0], [1, 0, 1, 0], [1, 1, 1, 1]])
有沒有一種簡單的方法可以獲得這樣的東西?我還可以生成一個大小為 (len(g)*2, len(g)*2) 的矩陣并嘗試在兩個 for 回圈中手動填充它,但這似乎非常煩人。
有沒有更好的辦法?
PS:對于那些對此感到好奇的人,該矩陣是極性代碼的生成器矩陣。
uj5u.com熱心網友回復:
IIUC,一種使用方式numpy.block:
g = np.array([[1, 0], [1, 1]])
g = np.block([[g, np.zeros(g.shape)], [g, g]])
輸出(迭代 1):
array([[1., 0., 0., 0.],
[1., 1., 0., 0.],
[1., 0., 1., 0.],
[1., 1., 1., 1.]])
輸出(迭代 2):
array([[1., 0., 0., 0., 0., 0., 0., 0.],
[1., 1., 0., 0., 0., 0., 0., 0.],
[1., 0., 1., 0., 0., 0., 0., 0.],
[1., 1., 1., 1., 0., 0., 0., 0.],
[1., 0., 0., 0., 1., 0., 0., 0.],
[1., 1., 0., 0., 1., 1., 0., 0.],
[1., 0., 1., 0., 1., 0., 1., 0.],
[1., 1., 1., 1., 1., 1., 1., 1.]])
uj5u.com熱心網友回復:
我沒有看到一種直接的生成方式g_n,但是您可以將兩個 for 回圈減少為一個(連同n):
# another sample
g = np.array([[1, 0], [2, 3]])
g = (np.array([[g,np.zeros_like(g)],[g, g]])
.swapaxes(1,2).reshape(2*g.shape[0], 2*g.shape[1])
)
輸出:
array([[1, 0, 0, 0],
[2, 3, 0, 0],
[1, 0, 1, 0],
[2, 3, 2, 3]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/376361.html
上一篇:使用SciPy計算分箱均值??:binned_statistic 處理NaN(SciPy的ValueError和statistic=np.nanmean)
下一篇:在條件不起作用的情況下創建一列
