numpy.block#
- numpy.block(arrays)[原始碼]#
從區塊的巢狀清單組裝一個 nd-array。
最內層清單中的區塊會沿著最後一個維度 (-1) 串聯 (請參閱
concatenate
),然後這些區塊會沿著倒數第二個維度 (-2) 串聯,依此類推,直到到達最外層清單。區塊可以是任何維度,但不會使用一般規則進行廣播。相反地,會插入大小為 1 的前導軸,使所有區塊的
block.ndim
相同。這主要用於處理純量,並且表示像np.block([v, 1])
這樣的程式碼是有效的,其中v.ndim == 1
。當巢狀清單為兩層深時,這允許從其組件建構區塊矩陣。
- 參數:
- arraysarray_like 或純量的巢狀清單 (但不是元組)
如果傳遞單個 ndarray 或純量 (深度為 0 的巢狀清單),則會傳回未修改的 (且未複製的)。
元素形狀必須沿適當的軸 (不進行廣播) 匹配,但會根據需要將前導 1 新增至形狀,以使維度匹配。
- 傳回:
- block_arrayndarray
從給定區塊組裝的陣列。
輸出的維度等於以下各項的最大值
所有輸入的維度
輸入清單的巢狀深度
- 引發:
- ValueError
如果清單深度不匹配 - 例如,
[[a, b], c]
是不合法的,應拼寫為[[a, b], [c]]
如果清單為空 - 例如,
[[a, b], []]
另請參閱
concatenate
沿現有軸連接陣列序列。
stack
沿新軸連接陣列序列。
vstack
垂直 (逐列) 堆疊陣列序列。
hstack
水平 (逐行) 堆疊陣列序列。
dstack
深度方向 (沿第三軸) 堆疊陣列序列。
column_stack
將 1-D 陣列堆疊為 2-D 陣列中的列。
vsplit
將陣列垂直 (逐列) 分割成多個子陣列。
unstack
沿軸將陣列分割成子陣列的元組。
註解
當僅使用純量呼叫時,
np.block
等效於 ndarray 呼叫。因此,np.block([[1, 2], [3, 4]])
等效於np.array([[1, 2], [3, 4]])
。此函數不強制區塊位於固定網格上。
np.block([[a, b], [c, d]])
不限於以下形式的陣列AAAbb AAAbb cccDD
但也允許產生,對於某些
a, b, c, d
AAAbb AAAbb cDDDD
由於串聯首先沿著最後一個軸發生,
block
無法直接產生以下內容AAAbb cccbb cccDD
Matlab 的「方括號堆疊」,
[A, B, ...; p, q, ...]
,等效於np.block([[A, B, ...], [p, q, ...]])
。範例
此函數最常見的用途是建構區塊矩陣
>>> import numpy as np >>> A = np.eye(2) * 2 >>> B = np.eye(3) * 3 >>> np.block([ ... [A, np.zeros((2, 3))], ... [np.ones((3, 2)), B ] ... ]) array([[2., 0., 0., 0., 0.], [0., 2., 0., 0., 0.], [1., 1., 3., 0., 0.], [1., 1., 0., 3., 0.], [1., 1., 0., 0., 3.]])
>>> np.block([1, 2, 3]) # hstack([1, 2, 3]) array([1, 2, 3])
>>> a = np.array([1, 2, 3]) >>> b = np.array([4, 5, 6]) >>> np.block([a, b, 10]) # hstack([a, b, 10]) array([ 1, 2, 3, 4, 5, 6, 10])
>>> A = np.ones((2, 2), int) >>> B = 2 * A >>> np.block([A, B]) # hstack([A, B]) array([[1, 1, 2, 2], [1, 1, 2, 2]])
使用深度為 2 的清單,
block
可以代替vstack
使用>>> a = np.array([1, 2, 3]) >>> b = np.array([4, 5, 6]) >>> np.block([[a], [b]]) # vstack([a, b]) array([[1, 2, 3], [4, 5, 6]])
>>> A = np.ones((2, 2), int) >>> B = 2 * A >>> np.block([[A], [B]]) # vstack([A, B]) array([[1, 1], [1, 1], [2, 2], [2, 2]])
它也可以代替
atleast_1d
和atleast_2d
使用>>> a = np.array(0) >>> b = np.array([1]) >>> np.block([a]) # atleast_1d(a) array([0]) >>> np.block([b]) # atleast_1d(b) array([1])
>>> np.block([[a]]) # atleast_2d(a) array([[0]]) >>> np.block([[b]]) # atleast_2d(b) array([[1]])