You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

验证m×n×n型numpy张量中矩阵元素与转置元素互为倒数

高效验证m个n×n方阵元素与转置位置互为倒数的实现

核心思路

  • 利用numpy的向量化操作实现全张量批量计算,规避Python循环的性能开销
  • 通过转置张量与原张量的元素级乘积是否全为1,验证互为倒数的条件
  • 使用浮点安全的np.allclose处理数值精度误差问题

实现代码

import numpy as np

def check_reciprocal_transpose(tensor):
    # 验证输入形状合法性
    if tensor.ndim != 3 or tensor.shape[1] != tensor.shape[2]:
        raise ValueError("输入必须是形状为(m, n, n)的3D张量")
    
    # 对每个方阵执行转置(交换后两个维度)
    transposed_tensor = tensor.transpose(0, 2, 1)
    
    # 计算原张量与转置张量的元素级乘积
    element_product = tensor * transposed_tensor
    
    # 检查所有乘积是否在浮点误差范围内等于1
    return np.allclose(element_product, np.ones_like(element_product))

性能优势说明

  • 全向量化并行:所有核心计算(转置、乘积、精度检查)均为numpy底层C实现,自动利用CPU的SIMD并行指令,最大化硬件利用率
  • 内存高效:transpose操作返回原张量的视图而非复制,无额外内存冗余开销
  • 批量处理:一次性处理所有m个方阵,无需循环遍历单个矩阵

测试示例

# 生成4个符合条件的3×3矩阵
m, n = 4, 3
test_tensor = np.random.rand(m, n, n)

# 构造满足互为倒数条件的张量
for idx in range(m):
    mat = test_tensor[idx]
    for i in range(n):
        for j in range(i, n):
            if i == j:
                mat[i, j] = 1.0  # 对角线元素必须为±1,此处取1
            else:
                mat[j, i] = 1.0 / mat[i, j]

# 验证结果
print(check_reciprocal_transpose(test_tensor))  # 输出 True

特殊情况处理

  • 对角线元素:自动验证对角线元素是否满足A[i,i] = 1/A[i,i](即值为±1),不满足则返回False
  • 零元素:若存在0,其转置位置元素需为无穷大,但0 * inf = nan,np.allclose会判定为不满足条件,返回False,符合逻辑
  • 精度适配:可通过调整np.allclose的rtol(相对误差)和atol(绝对误差)参数,适配不同场景的精度需求

内容的提问来源于stack exchange,提问作者EESHAN ANAND

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:42:27