python – numpy中的对角线堆叠?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – numpy中的对角线堆叠?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2164字,纯文字阅读大概需要4分钟。
内容图文
![python – numpy中的对角线堆叠?](/upload/InfoBanner/zyjiaocheng/802/b56132734c1943c593136772e399333e.jpg)
所以numpy有一些便利功能,可以将几个数组合成一个,例如: hstack和vstack.我想知道是否有类似的东西,但对角堆叠组件数组?
假设我有N个形状的数组(n_i,m_i),我想将它们组合成一个大小的单个数组(sum_ {1,N} n_i,sum_ {1,N} m_i),这样组件数组就会形成块结果数组的对角线.
是的,我知道如何手动解决它,例如采用How to “embed” a small numpy array into a predefined block of a large numpy array?中描述的方法.只是想知道是否有更简单的方法.
啊,How can I transform blocks into a blockdiagonal matrix (NumPy)提到scipy.linalg.block_diag()是解决方案,除了我工作站上安装的scipy版本太旧而没有它.还有其他想法吗?
解决方法:
似乎block_diag完全符合您的要求.因此,如果由于某种原因你无法更新scipy,那么如果你想简单地定义它,那么这里是来自v0.8.0的源代码!
def block_diag(*arrs):
"""Create a block diagonal matrix from the provided arrays.
Given the inputs `A`, `B` and `C`, the output will have these
arrays arranged on the diagonal::
[[A, 0, 0],
[0, B, 0],
[0, 0, C]]
If all the input arrays are square, the output is known as a
block diagonal matrix.
Parameters
----------
A, B, C, ... : array-like, up to 2D
Input arrays. A 1D array or array-like sequence with length n is
treated as a 2D array with shape (1,n).
Returns
-------
D : ndarray
Array with `A`, `B`, `C`, ... on the diagonal. `D` has the
same dtype as `A`.
References
----------
.. [1] Wikipedia, "Block matrix",
http://en.wikipedia.org/wiki/Block_diagonal_matrix
Examples
--------
>>> A = [[1, 0],
... [0, 1]]
>>> B = [[3, 4, 5],
... [6, 7, 8]]
>>> C = [[7]]
>>> print(block_diag(A, B, C))
[[1 0 0 0 0 0]
[0 1 0 0 0 0]
[0 0 3 4 5 0]
[0 0 6 7 8 0]
[0 0 0 0 0 7]]
>>> block_diag(1.0, [2, 3], [[4, 5], [6, 7]])
array([[ 1., 0., 0., 0., 0.],
[ 0., 2., 3., 0., 0.],
[ 0., 0., 0., 4., 5.],
[ 0., 0., 0., 6., 7.]])
"""
if arrs == ():
arrs = ([],)
arrs = [np.atleast_2d(a) for a in arrs]
bad_args = [k for k in range(len(arrs)) if arrs[k].ndim > 2]
if bad_args:
raise ValueError("arguments in the following positions have dimension "
"greater than 2: %s" % bad_args)
shapes = np.array([a.shape for a in arrs])
out = np.zeros(np.sum(shapes, axis=0), dtype=arrs[0].dtype)
r, c = 0, 0
for i, (rr, cc) in enumerate(shapes):
out[r:r + rr, c:c + cc] = arrs[i]
r += rr
c += cc
return out
内容总结
以上是互联网集市为您收集整理的python – numpy中的对角线堆叠?全部内容,希望文章能够帮你解决python – numpy中的对角线堆叠?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。