當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python numpy block用法及代碼示例


本文簡要介紹 python 語言中 numpy.block 的用法。

用法:

numpy.block(arrays)

從嵌套的塊列表中組裝 nd-array。

最內層列表中的塊沿著最後一個維度 (-1) 連接(參見 concatenate ),然後這些塊沿著 second-last 維度 (-2) 連接,依此類推,直到到達最外層列表。

塊可以是任何維度,但不會使用正常規則進行廣播。相反,插入大小為 1 的引導軸,以使所有塊的 block.ndim 相同。這主要用於處理標量,這意味著像 np.block([v, 1]) 這樣的代碼是有效的,其中 v.ndim == 1

當嵌套列表有兩層深度時,這允許從它們的組件構造塊矩陣。

參數

arrays 數組 或標量的嵌套列表(但不是元組)

如果傳遞單個 ndarray 或標量(深度為 0 的嵌套列表),則返回未修改(且未複製)。

元素形狀必須沿適當的軸匹配(不廣播),但前導 1 將根據需要添加到形狀之前以使尺寸匹配。

返回

block_array ndarray

從給定塊組裝的數組。

輸出的維數等於以下各項中的最大值: * 所有輸入的維數 * 輸入列表嵌套的深度

拋出

ValueError
  • 如果列表深度不匹配 - 例如,[[a, b], c] 是非法的,應拚寫為 [[a, b], [c]]

  • 如果列表為空 - 例如,[[a, b], []]

注意

當僅使用標量調用時,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 _not_ 能夠直接產生以下內容:

AAAbb
cccbb
cccDD

Matlab 的“square bracket stacking”,[A, B, ...; p, q, ...],等價於np.block([[A, B, ...], [p, q, ...]])

例子

該函數最常見的用途是構建塊矩陣

>>> 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.]])

對於深度為 1 的列表,block 可以用作 hstack

>>> 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]])

相關用法


注:本文由純淨天空篩選整理自numpy.org大神的英文原創作品 numpy.block。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。