numpy 1.22.4 Pypi GitHub Homepage
Other Docs
NotesParametersRaisesReturnsBackRef
block(arrays)

Blocks in the innermost lists are concatenated (see concatenate ) along the last dimension (-1), then these are concatenated along the second-last dimension (-2), and so on until the outermost list is reached.

Blocks can be of any dimension, but will not be broadcasted using the normal rules. Instead, leading axes of size 1 are inserted, to make block.ndim the same for all blocks. This is primarily useful for working with scalars, and means that code like np.block([v, 1]) is valid, where v.ndim == 1 .

When the nested list is two levels deep, this allows block matrices to be constructed from their components.

versionadded

Notes

When called with only scalars, np.block is equivalent to an ndarray call. So np.block([[1, 2], [3, 4]]) is equivalent to np.array([[1, 2], [3, 4]]) .

This function does not enforce that the blocks lie on a fixed grid. np.block([[a, b], [c, d]]) is not restricted to arrays of the form:

AAAbb
AAAbb
cccDD

But is also allowed to produce, for some a, b, c, d :

AAAbb
AAAbb
cDDDD

Since concatenation happens along the last axis first, block is _not_ capable of producing the following directly:

AAAbb
cccbb
cccDD

Matlab's "square bracket stacking", [A, B, ...; p, q, ...] , is equivalent to np.block([[A, B, ...], [p, q, ...]]) .

Parameters

arrays : nested list of array_like or scalars (but not tuples)

If passed a single ndarray or scalar (a nested list of depth 0), this is returned unmodified (and not copied).

Elements shapes must match along the appropriate axes (without broadcasting), but leading 1s will be prepended to the shape as necessary to make the dimensions match.

Raises

ValueError
  • If list depths are mismatched - for instance, [[a, b], c] is illegal, and should be spelt [[a, b], [c]]

  • If lists are empty - for instance, [[a, b], []]

Returns

block_array : ndarray

The array assembled from the given blocks.

The dimensionality of the output is equal to the greatest of: * the dimensionality of all the inputs * the depth to which the input list is nested

Assemble an nd-array from nested lists of blocks.

See Also

column_stack

Stack 1-D arrays as columns into a 2-D array.

concatenate

Join a sequence of arrays along an existing axis.

dstack

Stack arrays in sequence depth wise (along third axis).

hstack

Stack arrays in sequence horizontally (column wise).

stack

Join a sequence of arrays along a new axis.

vsplit

Split an array into multiple sub-arrays vertically (row-wise).

vstack

Stack arrays in sequence vertically (row wise).

Examples

The most common use of this function is to build a block matrix

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

With a list of depth 1, block can be used as 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]])

With a list of depth 2, block can be used in place of 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]])

It can also be used in places of atleast_1d and 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]])
See :

Back References

The following pages refer to to this document either explicitly or contain code examples using this.

numpy.hstack numpy.bmat numpy.stack numpy.ma.extras.dstack numpy.dstack numpy.ma.extras.hstack numpy.block numpy.ma.extras.stack numpy.concatenate numpy.core._multiarray_umath.concatenate numpy.vstack numpy.ma.extras.vstack

Local connectivity graph

Hover to see nodes names; edges to Self not shown, Caped at 50 nodes.

Using a canvas is more power efficient and can get hundred of nodes ; but does not allow hyperlinks; , arrows or text (beyond on hover)

SVG is more flexible but power hungry; and does not scale well to 50 + nodes.

All aboves nodes referred to, (or are referred from) current nodes; Edges from Self to other have been omitted (or all nodes would be connected to the central node "self" which is not useful). Nodes are colored by the library they belong to, and scaled with the number of references pointing them


GitHub : /numpy/core/shape_base.py#680
type: <class 'function'>
Commit: