如何将Sage的OperationTable转换为FiniteDimensionalAlgebra要求的输入格式
最优转换方法
实现逻辑
OperationTable的table()方法返回的二维数组op_table中,op_table[i][j]正好对应基元素e_i右乘e_j得到的结果对应的基索引,和FiniteDimensionalAlgebra要求的右乘矩阵逻辑完全匹配:
- 右乘
e_j的矩阵共n行n列(n为代数维度,即基元素数量) - 矩阵的第i行(对应左乘元素为
e_i)仅在op_table[i][j]对应的列位置值为1,其余位置为0
代码实现
易读版本
# 从OperationTable获取乘法索引表 op_table = T.table() n = len(op_table) mat_list = [] for j in range(n): # 逐个构造右乘e_j的矩阵 current_rows = [] for i in range(n): row = [0] * n row[op_table[i][j]] = 1 current_rows.append(row) mat_list.append(Matrix(QQ, current_rows)) # 生成目标有限维代数 B = FiniteDimensionalAlgebra(QQ, mat_list)
简洁列表推导版本
op_table = T.table() n = len(op_table) mat_list = [Matrix(QQ, [[1 if col == op_table[row][j] else 0 for col in range(n)] for row in range(n)]) for j in range(n)] B = FiniteDimensionalAlgebra(QQ, mat_list)
复杂度说明
该方法时间复杂度为O(n²),是理论最优的转换方案,没有冗余计算,完全匹配Sage内置方法的输入要求。
内容的提问来源于stack exchange,提问作者limakzi
相关产品推荐
相关产品推荐

