python - 用于在 NumPy 中创建块矩阵序列的向量化语法
问题描述
我有两个 3D 数组A
,分别B
带有形状(k, n, n)
和(k, m, m)
。我想创建一个C
形状矩阵,(k, n+m, n+m)
使得对于每个0 <= i < k
,二维矩阵C[i,:,:]
是通过放置A[i, :, :]
在左上n x n
部分和B[i, :, :]
右下m x m
部分获得的块对角矩阵。
目前我正在使用以下方法来实现这一点,即 NumPy:
C = np.empty((k, n+m, n+m))
for i in range(k):
C[i, ...] = np.block([[A[i,...], np.zeros((n,m))],
[np.zeros((m,n)), B[i,...]]])
我想知道是否有办法在没有for
循环的情况下做到这一点。我认为如果k
很大,我的解决方案不是很有效。
解决方案
IIUC 您可以简单地切片和分配 -
C = np.zeros((k, n+m, n+m),dtype=np.result_type(A,B))
C[:,:n,:n] = A
C[:,n:,n:] = B
推荐阅读
- postgresql - 将 DB2 触发器重写为 PostgreSQL 触发器
- javascript - 获取移动/旋转元素的当前位置
- android - 数据绑定:无法将 ArrayAdpater 绑定到 AppCompatAutoCompleteTextView
- asp.net - 从 WordPress 迁移到 ASP.NET-MVC-5,如何完全删除 WordPress url
- angular - Angular6:如何从命令行生成默认的 angular.json 文件
- python - 无法在 Ubuntu 中启动 Jupyter Notebook
- laravel - 在Controller中调用函数的方式
- .net-core - 在 NLog for .NET Core 应用程序中添加 EventLog 作为目标会导致解析配置错误
- android - 从 espresso adb shell android 设置日期/时间
- maven - 将 Maven 原型存储在 Google Cloud Storage 中