假设有一个名为“A”的二维 numpy 数组(或数学矩阵),我想将其第一行与另一行“n”交换。 n 可以是任何自然数。以下代码不起作用
A = np.eye(3)
n = 2
A[0], A[n] = A[n], A[0]
print(A)
你可以看到它给出了(为了简单起见,我展示了矩阵形式 A)
A =
0, 0, 1
0, 1, 0
0, 0, 1
但我想要的是
A =
0, 0, 1
0, 1, 0
1, 0, 0
我想过一个解决方案是引入另一个等于“A”的矩阵“B”,但“A”和“B”是不同的对象。然后这样做
A = np.eye(3)
B = np.eye(3)
A[0], A[n] = B[n], B[0]
这可以在 A 上给出正确的交换。但是它需要一个额外的矩阵“B”,我不知道它是否具有计算效率。或者也许你有更好的主意?谢谢:)
最佳答案
列表交换通过引用传递来交换变量。因此,通过传统的按值交换进行内部元素交换是行不通的,即 a,b=b,a
您可以在此处进行内部列表修改。一个接一个执行,消除了覆盖问题。
代码:
import numpy as np
A = np.eye(3)
n = 2
A[[0,n]] = A[[n,0]]
print(A)
输出:
[[ 0. 0. 1.]
[ 0. 1. 0.]
[ 1. 0. 0.]]
关于python - 在 Python 3 中,如何交换二维 numpy 数组中的两个子数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39169268/