python - Numpy 对称 4D 矩阵构造
问题描述
我想构造一个具有以下结构的数组:
A[i,j,i,j,] = B[i,j]
与所有其他条目 0:A[i,j,l,k]=0 # (i,j) =\= (l,k)
即,如果我B
构建了矩阵,我该如何创建矩阵A
,最好以矢量化方式。
明确地,让B = [[1,2],[3,4]]
然后:
A[1,1,:,:]=[[1,0],[0,0]]
A[1,2,:,:]=[[0,2],[0,0]]
A[2,1,:,:]=[[0,0],[3,0]]
A[2,2,:,:]=[[0,0],[0,4]]
解决方案
我们可以使用开放网格来分配A
跨轴广播索引数组:
B = np.array([[1,2],[3,4]])
i,j = B.shape
A = np.zeros([i,j,i,j])
i, j = np.ogrid[:i, :j]
A[i,j,i,j] = B
print(A)
array([[[[1., 0.],
[0., 0.]],
[[0., 2.],
[0., 0.]]],
[[[0., 0.],
[3., 0.]],
[[0., 0.],
[0., 4.]]]])
推荐阅读
- r - 两步集群
- java - PoolDataSource 与 CommonDataSource 冲突
- python - 如何替换“?” 在 cx_Oracle 查询中使用提供的值
- postgresql - PostGIS 扩展未定义符号:GEOSCoordSeq_getXY
- java - 如何在 Message Java 中验证数字签名?
- reactjs - 为什么每次我都需要检查反应中的变量值?
- android - Android - 在什么情况下/用例我想实现一个自定义 LifecycleOwner
- c# - 为什么调试器会遇到默认情况?
- php - 创建 PDF 时未应用 dompdf 横向视图
- c++ - 为什么重载'function(std :: string)'的调用是模棱两可的?