置换矩阵的向量形式存储及MATLAB中矩阵置换操作方法问询
嘿,这个问题问得特别实用!在MATLAB里用这种向量形式的置换来操作矩阵其实非常直观,核心要分行置换和列置换两种场景,我给你拆解清楚:
先明确置换向量的定义
你提到的向量p,每个元素p(i)表示置换矩阵第i行中1所在的列。换句话说,这个置换矩阵P满足P(i, p(i)) = 1,是一个标准的行置换矩阵。
1. 行置换操作(对应
P * A) 如果想把置换矩阵作用在矩阵A的行上(也就是用P左乘A),直接用向量p作为行索引即可:
% 示例:假设A是3x3矩阵,p是行置换向量 A = [1 2 3; 4 5 6; 7 8 9]; p = [3, 1, 2]; % 表示置换矩阵第1行取A的第3行,第2行取A的第1行,第3行取A的第2行 % 行置换结果,等价于 P*A row_permuted_A = A(p, :);
运行后row_permuted_A会变成:
7 8 9 1 2 3 4 5 6
2. 列置换操作(对应
A * P) 如果想把置换作用在矩阵A的列上(用P右乘A),直接用向量p作为列索引:
% 列置换结果,等价于 A*P col_permuted_A = A(:, p);
运行后col_permuted_A会变成:
3 1 2 6 4 5 9 7 8
这里的逻辑是:把A的第p(1)列作为结果的第1列,第p(2)列作为结果的第2列,以此类推。
3. 反向置换(还原操作)
如果需要把置换后的矩阵还原回原矩阵,可以用MATLAB内置的invperm函数生成置换向量的逆置换:
% 生成p的逆置换向量 p_inv = invperm(p); % 对于p=[3,1,2],p_inv会是[2,3,1] % 还原行置换后的矩阵 restored_A = row_permuted_A(p_inv, :); % 还原列置换后的矩阵 restored_A = col_permuted_A(:, p_inv);
注意事项
- 置换向量
p必须是1:n的一个完整排列(n是矩阵的行数/列数),不能有重复值或超出范围的数,否则MATLAB会抛出索引错误。 - 这种向量形式的置换比直接构造置换矩阵更高效,尤其是当矩阵规模很大时,能节省内存和计算时间。
内容的提问来源于stack exchange,提问作者Ted
相关产品推荐
相关产品推荐

