请教一个python写的交换矩阵行的代码问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教一个python写的交换矩阵行的代码问题相关的知识,希望对你有一定的参考价值。

# module swap
'''swapRows(v,i,j).
Swaps rows i and j of vector or matrix [v].

'''
defswapRows(v, i, j):
if len(v.getshape()) == 1:
v[i], v[j] = v[j], v[i]
else:
temp = v[i].copy()
v[i] = v[j]
v[j] = temp

上面是整个代码,我没有看懂这一段,
if len(v.getshape()) == 1:
v[i], v[j] = v[j], v[i]
这段代码是什么意思,else的部分不是直接交换行了吗,这行在干什么?
v[i], v[j] = v[j], v[i],能这样写吗?

参考技术A a,b=1,2

a,b=b,a
这是python 的精髓所在本回答被提问者和网友采纳

在排除某些行的矩阵的列中查找最大元素

【中文标题】在排除某些行的矩阵的列中查找最大元素【英文标题】:Finding the max element in a column of a matrix excluding certain rows 【发布时间】:2020-03-08 16:03:38 【问题描述】:

假设我有一个 nxn 矩阵。我的目标是找到第一列的最大元素,交换包含最大元素的行和第一行。接下来,我想找到第二列的最大元素,不包括第一行,然后交换这个新的最大元素的行和第二行。再次,找到第 j 列的最大元素,不包括第 1:j-1 行,然后将最大元素行与第 j 行交换,直到第 n-1 列(如在第 n 列期间,我只能选择从第 n 行开始)。 我目前的设置如下

for j = 1:n-1
   [~,row]=max(A(j:n,j));
   temp = A(row,:);
   A(row,:)=A(j,:);
   A(j,:)=temp;
   ...

虽然切换功能运行良好,[~, row]=max(A(j:n,j)) 能够并且始终如一地针对我专门处理的矩阵在 j 的第二次迭代期间输出第 1 行。我在这背后的思考过程是 j:n 代表我们要检查的行。注意到 j=2,对于它的第二次迭代,我希望这将搜索第 2 到第 n 行;但是,它似乎仍然检查每一行。

虽然之前有人问过这个问题,但我发现答案是同一行代码。

【问题讨论】:

您真的要交换整行吗?这表明只有最后一列定义了矩阵的最终排序 是的,这适用于 GEPP,所以行作为一个整体需要交换。例如,矩阵 [4,5,6; 1,2,3; 7,8,9]。我希望第一次迭代输出 [7,8,9; 1,2,3; 4,5,6],第一次迭代时 max2,1,7]=7,然后是 [7,8,9; 4,5,6; 1,2,3],在第二次迭代中 max2,5=5。 Tbh,在我正在寻找的状态下,这个算法似乎不会考虑最后一列。 max2,1,7]=7 是怎么结束的,根据你的描述,我预计最多 7,1,4。 我的错误。是的,期望的结果是 max4,1,7。 【参考方案1】:

您正在使用[~,row]=max(A(j:n,j));。假设您在迭代 j=2 中。 max 只会考虑第二行的输入。 row=1 的返回值表示 A 的第二行中的最大值。您放入函数的第一行。 max 函数不知道您实际上输入了更大的内容。您必须对此进行更正。

n=5
A=magic(n); %just some input data

for j = 1:n-1
   [~,row]=max(A(j:n,j));
   row=row+j-1;
   temp = A(row,:);
   A(row,:)=A(j,:);
   A(j,:)=temp; 
end

顺便说一句,matlab 可以在没有辅助变量的情况下进行行交换:

for j = 1:n-1
   [~,row]=max(A(j:n,j));
   row=row+j-1;
   A([row,j],:)=A([j,row],:); 
end

【讨论】:

谢谢,这太完美了。所以,为了确保我完全理解,当使用像 j:n 这样的间隔时,它(有点)创建一个新的矩阵,它是第 j 列到第 n 列,正如你所说,将第 j 列作为第一列并将第 n 列作为第 (n-j) 列?另外,感谢您提供更简洁的行交换。 是的,你的理解是对的。 A(j:n,j) 创建一个新矩阵,并传递给 max 函数。

以上是关于请教一个python写的交换矩阵行的代码问题的主要内容,如果未能解决你的问题,请参考以下文章

在排除某些行的矩阵的列中查找最大元素

请教用WPF怎么在代码中定义grid的行的高的比例

请教高手,怎么用awk来读取一个文本文件的指定行的内容

请教一个算法问题

调用适用于矩阵或向量的行的通用代码

请教一道矩阵理论的题目,关于Givens变换和Householder变换的,题目如图所示?