在NumPy中绕反对角线轴对矩阵进行转置
我想围绕反对角线轴对一个方阵进行转置:

我尝试将来自 一篇C++帖子 的代码改写成Python,以对我的矩阵进行转置:
import numpy as np
def swapEl(mat):
# Transpose matrix about anti-diagonal
num_rows, num_cols = mat.shape
n = num_rows # square matrix
for i in np.arange(0, n, 1):
for j in np.arange(0, n-i, 1):
tmp = mat[i, j]
mat[i, j] = mat[(n-1)-j, (n-1)-i]
mat[(n-1)-j, (n-1)-i] = tmp
return mat
m = np.array([[np.nan, 9, np.nan, 5],
[ 3, 4, np.nan, 6],
[np.nan, np.nan, np.nan, 7],
[np.nan, 2, np.nan, 8]])
print(swapEl(m))
我的矩阵包含 nan 个值。我打算只将 nan 替换成反对角线的数值:
起始:
[[nan 9. nan 5.]
[ 3. 4. nan 6.]
[nan nan nan 7.]
[nan 2. nan 8.]]
结束:
[[ 8. 9. 6. 5.]
[ 3. 4. nan 6.]
[ 2. nan 4. 7.]
[nan 2. 3. 8.]]
解决方案
要在numpy中围绕反对角线轴对矩阵 mat 进行转置,你可以很简单地使用:
np.flip(mat.T)
要在原始数组中填充NaN值,可以使用:
np.where(np.isnan(mat), np.flip(mat.T), mat)
完整示例:
import numpy as np
m = np.array([[np.nan, 9, np.nan, 5],
[ 3, 4, np.nan, 6],
[np.nan, np.nan, np.nan, 7],
[np.nan, 2, np.nan, 8]])
r = np.where(np.isnan(m), np.flip(m.T), m)
print(r)
输出:
[[ 8. 9. 6. 5.]
[ 3. 4. nan 6.]
[ 2. nan 4. 7.]
[nan 2. 3. 8.]]
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。