有方形矩阵A
,我希望在它之间交换2行,但有约束条件,这个交换只会对两行中对角线下的元素生效。
示例 -
1 2 3 4
3 6 7 8
6 5 4 2
9 4 6 7
在row1和row2之间的交换会返回相同的矩阵,因为第1行的对角线下没有元素。
但是row2和row3之间的交换会给出 -
1 2 3 4
6 6 7 8
3 5 4 2
9 4 6 7
实际上只在2个元素索引(3,1)和(2,1)之间交换,因为row2中没有更多元素在对角线下面。
如果给定两个必需的行索引,如何在没有显式循环的情况下获得此函数?
可以找到常规交换here。
答案 0 :(得分:6)
您可以尝试以下操作:
A([row1 row2],1:row1-1) = A([row2 row1],1:row1-1)
请注意,row1 <= row2
可以使用此功能。如有必要,您只需使用min
和/或max
查找最小/最大的内容。
答案 1 :(得分:4)
这应该可以解决问题:
function A = swapRowsBelowDiagonal(A, a,b)
m = min(a,b)-1;
[A(a,1:m), A(b,1:m)] = swap(A(a,1:m), A(b,1:m));
end
function [y,x] = swap(x,y), end % NOTE: no body, just for fun :)