numpy.
block
从嵌套的块列表中组装nd数组。
最里面的列表中的块被连接起来(请参见 concatenate )沿着最后一个维度(-1),然后沿着第二个最后一个维度(-2)连接这些维度,依此类推,直到到达最外面的列表。
concatenate
块可以是任何维度,但不会使用常规规则广播。相反,插入大小为1的前导轴,使 block.ndim 所有街区都一样。这对于使用scalar非常有用,这意味着 np.block([v, 1]) 是有效的,在哪里 v.ndim == 1 .
block.ndim
np.block([v, 1])
v.ndim == 1
当嵌套列表深度为两个级别时,这允许从其组件构造块矩阵。
1.13.0 新版功能.
如果传递单个ndarray或scalar(深度为0的嵌套列表),则返回未修改的(而不是复制的)。
元素形状必须沿着适当的轴匹配(不进行广播),但在必要时,前导1将被预先设置为形状以使尺寸匹配。
由给定块组装而成的数组。
输出的维数等于以下最大值: 所有输入的维数 输入列表嵌套的深度
如果列表深度不匹配-例如, [[a, b], c] 是非法的,应该拼写为 [[a, b], [c]]
[[a, b], c]
[[a, b], [c]]
如果列表为空-例如, [[a, b], []]
[[a, b], []]
参见
沿现有轴联接一系列数组。
stack
沿新轴连接一系列数组。
vstack
按顺序垂直堆叠数组(按行)。
hstack
按水平顺序(按列)堆叠数组。
dstack
按顺序深度(沿第三轴)堆叠数组。
column_stack
将一维数组作为列堆叠到二维数组中。
vsplit
将一个数组垂直(按行)拆分为多个子数组。
笔记
当只使用scalars调用时, np.block 相当于一个ndarray调用。所以 np.block([[1, 2], [3, 4]]) 等于 np.array([[1, 2], [3, 4]]) .
np.block
np.block([[1, 2], [3, 4]])
np.array([[1, 2], [3, 4]])
此函数不强制块位于固定网格上。 np.block([[a, b], [c, d]]) 不限于以下形式的数组:
np.block([[a, b], [c, d]])
AAAbb AAAbb cccDD
但也允许生产 a, b, c, d ::
a, b, c, d
AAAbb AAAbb cDDDD
因为连接首先发生在最后一个轴上, block 是 _not_ 能够直接生成以下内容:
AAAbb cccbb cccDD
matlab的“方括号叠加”, [A, B, ...; p, q, ...] ,等于 np.block([[A, B, ...], [p, q, ...]]) .
[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
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]])