У меня есть матрица, например, 5x5.Как найти все возможные перестановки матрицы в R?
[,1] [,2] [,3] [,4] [,5]
[1,] 22 -2 -2 -2 2
[2,] -2 22 2 2 2
[3,] -2 2 22 2 2
[4,] -2 2 2 22 2
[5,] 2 2 2 2 22.
Как вы можете видеть, матрица симметрична. Над главной диагональю находятся 4 + 3 + 2 + 1 = 10 позиций, и я нахожу через combn
все возможные (перестановочные) матрицы, которые имеют (-2) 3 раза в этих 10 положениях. Это означает, что 10!/3! * 7! = 120 матриц.
Но некоторые из них являются эквивалентными.
Итак, моя проблема заключается в том, как найти неэквивалентные матрицы из 120.
Я принимаю около матриц перестановок, потому что если я выбрать один из 120 матриц и я использую rmperm
, я как результат один (случайный) из 120 матриц.
Когда у меня есть матрицы 5x5 и 6x6, у меня нет проблем, потому что я разработал алгоритм. Но теперь я хочу сделать то же самое в матрице 7x7 и более, но алгоритм очень медленный, потому что у меня много циклов.
Итак, я хочу с одной командой, когда я выбираю матрицу из 120 матриц, чтобы дать мне все матрицы перестановки из 120.
Спасибо большое!
Если, как говорит Джосилбер, вы ищете все перестановки строк и столбцов, это n!^2. Для матрицы 10x10 это более 13 ** триллионов ** матриц, которых, вероятно, слишком много, чтобы создать первое, а затем выбрать уникальные. Есть ли какая-либо симметрия или структура, которые вы можете использовать для сокращения проблемы? – Gregor
Грегор, матрицы, которые я использую, являются симметричными. –
Всегда ли верно, что у вас всего 2 числа (-2 и 2 в приведенном выше примере) в недиагональных положениях? Если, например, у вас были номера с 1 по 10 в этих 10 позициях, было бы 10! перестановки из них, все из которых были бы уникальными. Единственная причина, по которой вы можете сказать, что в приведенном выше примере есть только 120 перестановок (не обязательно всех уникальных), потому что вы предположили, что существует только два уникальных значения, разделенных 7/3. – josliber