如何将3D数组的元素制作成上三角然后转置
How to make element of 3D array into upper triangular and then tranpose it
比如我得到下面的3D数组
[[[1,2,3],
[4,5,6]
[7,8,9]],
[[1,3,5],
[2,4,6],
[5,7,9]]
[[1,4,6],
[2,4,7],
[5,8,9]]
]
第一个问题是如何让第一个轴上的每个元素成为三角矩阵,即
[[[0,2,3],
[0,0,6]
[0,0,0]],
[[0,3,5],
[0,0,6],
[0,0,0]]
[[0,4,6],
[0,0,7],
[0,0,0]]
]
基于此,我该如何转置它们中的每一个,例如
[[[0,0,0],
[2,0,0]
[3,6,0]],
[[0,0,0],
[3,0,0],
[5,6,0]]
[[0,0,0],
[4,0,0],
[6,7,0]]
]
使用np.triu
然后沿着最后两个轴交换轴以有效地进行转置-
In [10]: np.triu(a,1).swapaxes(1,2)
Out[10]:
array([[[0, 0, 0],
[2, 0, 0],
[3, 6, 0]],
[[0, 0, 0],
[3, 0, 0],
[5, 6, 0]],
[[0, 0, 0],
[4, 0, 0],
[6, 7, 0]]])
交换也可以用ndarray.transpose(0,2,1)
实现。
您可以一次完成这两项任务(一个循环):
for i in range(a.shape[0]):
a[i,...] = np.triu(a[i,...], k=1).T
结果是:
array([[[0, 0, 0],
[2, 0, 0],
[3, 6, 0]],
[[0, 0, 0],
[3, 0, 0],
[5, 6, 0]],
[[0, 0, 0],
[4, 0, 0],
[6, 7, 0]]])
比如我得到下面的3D数组
[[[1,2,3],
[4,5,6]
[7,8,9]],
[[1,3,5],
[2,4,6],
[5,7,9]]
[[1,4,6],
[2,4,7],
[5,8,9]]
]
第一个问题是如何让第一个轴上的每个元素成为三角矩阵,即
[[[0,2,3],
[0,0,6]
[0,0,0]],
[[0,3,5],
[0,0,6],
[0,0,0]]
[[0,4,6],
[0,0,7],
[0,0,0]]
]
基于此,我该如何转置它们中的每一个,例如
[[[0,0,0],
[2,0,0]
[3,6,0]],
[[0,0,0],
[3,0,0],
[5,6,0]]
[[0,0,0],
[4,0,0],
[6,7,0]]
]
使用np.triu
然后沿着最后两个轴交换轴以有效地进行转置-
In [10]: np.triu(a,1).swapaxes(1,2)
Out[10]:
array([[[0, 0, 0],
[2, 0, 0],
[3, 6, 0]],
[[0, 0, 0],
[3, 0, 0],
[5, 6, 0]],
[[0, 0, 0],
[4, 0, 0],
[6, 7, 0]]])
交换也可以用ndarray.transpose(0,2,1)
实现。
您可以一次完成这两项任务(一个循环):
for i in range(a.shape[0]):
a[i,...] = np.triu(a[i,...], k=1).T
结果是:
array([[[0, 0, 0],
[2, 0, 0],
[3, 6, 0]],
[[0, 0, 0],
[3, 0, 0],
[5, 6, 0]],
[[0, 0, 0],
[4, 0, 0],
[6, 7, 0]]])