让我们考虑以下矩阵:
[v1 v2 v3 v4 v5 v6] =
[[1., 0., 0., 0., 0., 0.],
[0., 0., 1., 0., 0., 0.],
[0., 1., 0., 0., 0., 0.],
[0., 0., 0., 1., 0., 0.],
[0., 0., 0., 0., 0., 1.],
[0., 0., 0., 0., 1., 0.]],
其中向量 [v2 v3] 和 [v5 v6] 相对于单位矩阵进行交换。
从单位矩阵开始,我们如何使用切片/索引构建先前的矩阵?
如果想明确地做到这一点,我们应该执行以下操作:
x = np.eye(6)
x[[1,2]] = x[[2,1]]
x[[4,5]] = x[[5,6]]
最佳答案
可扩展到任何N
的向量解决方案:
N=2
s = np.zeros((3*N,3*N))
pattern = [[1,0,0],[0,0,1],[0,1,0]]
s.reshape(N,3,N,3)[range(N),:,range(N),:] = pattern
对于
array([[1., 0., 0., 0., 0., 0.],
[0., 0., 1., 0., 0., 0.],
[0., 1., 0., 0., 0., 0.],
[0., 0., 0., 1., 0., 0.],
[0., 0., 0., 0., 0., 1.],
[0., 0., 0., 0., 1., 0.]])
关于python - 使用切片/索引在矩阵内切换 numpy 向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54732283/