不负相思意
置换矩阵是一个很好的数学概念,但它们不是您以编程方式处理向量中元素重新排序的方式(除非您尝试使用 numpy 做一些特殊的事情)。从重新排序的索引的向量 (K) 创建置换矩阵 (P) 可以这样完成:def pMatBuild(A): return [ [int(a==b) for b in range(len(A))] for a in A ]K = [0,3,1,4,2]P = pMatBuild(K)输出:for line in P: print(line)[1, 0, 0, 0, 0][0, 0, 0, 1, 0][0, 1, 0, 0, 0][0, 0, 0, 0, 1][0, 0, 1, 0, 0]将此置换矩阵应用于另一个向量(即相乘)可以这样完成:def pMatApply(P,V): return [ V[row.index(1)] for row in P ] # inefficient lookup of 1 on each row输出:V = "ABCDE" print(pMatApply(P,V))['A', 'D', 'B', 'E', 'C']但是,在代码中,比置换矩阵更有效的是使用原始索引向量 K:V = "ABCDE"print([V[i] for i in K])['A', 'D', 'B', 'E', 'C']