【发布时间】:2016-03-30 00:45:08
【问题描述】:
假设我有以下矩阵/数组:
array([[0, 0, 1, 1, 1],
[0, 0, 1, 0, 1],
[1, 1, 0, 1, 1],
[1, 0, 1, 0, 0],
[1, 1, 1, 0, 0]])
我想应用以下排列:
1 -> 5
2 -> 4
结果应该是最后的:
array([[1, 1, 1, 0, 0],
[1, 0, 1, 0, 0],
[1, 1, 0, 1, 1],
[0, 0, 1, 0, 1],
[0, 0, 1, 1, 1]])
现在,一种非常幼稚(而且耗费大量内存)的方法可能是:
a2 = deepcopy(a1)
a2[0,:] = a1[4,:]
a2[4,:] = a1[0,:]
a = deepcopy(a2)
a2[:,0] = a[:,4]
a2[:,4] = a[:,0]
a3 = deepcopy(a2)
a2[1,:] = a3[3,:]
a2[3,:] = a3[1,:]
a = deepcopy(a2)
a2[:,1] = a[:,3]
a2[:,3] = a[:,1]
但是,我想知道是否有更有效的方法可以做到这一点。 numpy.shuffle 和 numpy.permutation 似乎只置换矩阵的行(而不是同时置换列)。这对我不起作用,因为矩阵是邻接矩阵(表示图),我需要进行排列,这将给我一个与原始图同构的图。此外,我需要进行任意数量的排列(不止一个)。
谢谢!
【问题讨论】:
-
您发布的示例结果与您的输入相同。请修复。
-
另外,你没有置换任何东西,只是交换元素。
-
现在修复它!好吧,我需要做的是根据交换顺序 (1 -> 5, 2 ->4) 来交换那些行和列。如果您将矩阵视为图的邻接矩阵,那么这样做将给出另一个图,该图与第一个图具有同构。
-
如果你对数组不做任何事情,你将匹配你的预期输出
标签: python-2.7 numpy matrix permutation adjacency-matrix