Мне нужно создать все матрицы 0,1 NxN с нулевой диагональю. Матрицы должны быть симметричными. В каждом столбце и строке должно быть хотя бы одно 1. Любые идеи, которые могут помочь?Симметричные матрицы 0,1
ответ
получать все возможные матрицы этой формы
Идея заключается в том, что каждая матрицу этого типа с размером NxN определяется его верхними диагональными значениями. Поэтому повторение всех возможных шаблонов для верхней диагональной части и совмещение этих значений с нижней диагональю сделают трюк. Пример кода:
%defines N
N = 3;
%calculates degree of freedom
nValuesToRand = ((N*N) - N)/2;
%generate all possible binary patterns of size nValuesToRand
B = dec2bin(0:2^nValuesToRand - 1);
%masks of lower and upper diagonal - will be used later on
upperTriagonalMask = logical(triu(ones(N,N)) - eye(N));
lowerTriagonalMask = logical(tril(ones(N,N)) - eye(N));
%generates a new cell to hold the matrices
allMatrices = cell(size(B,1),1);
%iterates over all possible patterns
for i=1:size(B,1)
%generates a new matrix
mat = zeros(N,N);
%initializes its upper diagonal according to the binary pattern
mat(upperTriagonalMask) = logical(B(i,:)- 48);
%copies the upper triagonal to the lower triagonal (for symmetricality)
upperTriagonalTransposed = triu(mat)';
mat(lowerTriagonalMask) = upperTriagonalTransposed(lowerTriagonalMask);
%ignores illegal Matrices
if sum(sum(mat,2)==0)>0
continue;
end
%saves mat in the cell
allMatrices{i} = mat;
end
%cleanes cell
allMatrices = allMatrices(~cellfun(@isempty, allMatrices));
Генерация случайных матриц
генерации всех возможных матриц для больших значений N вычислительно трудно. Если вы хотите создать матрицу случайным образом, вы можете попробовать следующий подход:
%Dimension size
N = 6;
%Probability for appearance of 0
P = 0.5;
%A mask of the lower diagonal, to be used later on
lowerTriagonalMask = logical(tril(ones(N,N)));
%initializes the matrix
mat = zeros(N,N);
%runs the loop as long as the matrix is not valid
while (sum(mat,2)==0)>0
%defines a random binary matrix
mat = rand(N,N) > P;
%zero out the diagonal values
mat(logical(eye(N))) = 0;
%copies the upper triagonal to the lower triagonal (for symmetricality)
upperTriagonalTransposed = triu(mat)';
mat(lowerTriagonalMask) = upperTriagonalTransposed(lowerTriagonalMask);
end
%testing
issymmetric(double(mat))
mat
результат:
ans =
1
mat =
0 1 1 1 0 0
1 0 1 1 1 1
1 1 0 0 0 1
1 1 0 0 0 1
0 1 0 0 0 1
0 1 1 1 1 0
Спасибо за ответ @drorco. Все еще не знают, как сгенерировать все матрицы, соответствующие условиям. – Kajko
@Kajko ** все **? Вы понимаете, сколько их есть? Он не имеет большого значения для больших значений 'N'. – rayryeng
@rayryeng, конечно, их много, поэтому максимум N, который мне нужен, равен 6. Это должно быть доступное значение. – Kajko
- 1. симметричные матрицы в собственном
- 2. Симметричные матрицы в numpy?
- 3. writedlm матрица Bool как 0,1 матрицы
- 4. Как удалить симметричные строки из матрицы в Matlab?
- 5. Симметричные гистограммы
- 6. Симметричные выражения в excel-матрице
- 7. Как создать цветовую карту из цветового диапазона матрицы [0,1] в интервале [0,1] в Matlab
- 8. Как создать случайные симметричные матрицы 0-1 с ограниченным числом 1 в каждой строке
- 9. Симметричные позиции в матрице
- 10. симметричные двунаправленные не работают
- 11. SQL-Удалить симметричные дубликаты
- 12. Симметричные аргументы шаблона
- 13. Симметричные перекрестное соединение
- 14. Симметричные оси в gnuplot
- 15. Геометрически симметричные операции
- 16. значащих десятичные цифры (или 0,3 - 0,1 = 0,1)
- 17. 1 %% 0,1 = 0,1 И 1 %% 0,2 = 0,2?
- 18. Симметричные и асимметричные шифры, неотказуемые?
- 19. Найти симметричные слова в тексте
- 20. Как удалить/предотвратить симметричные решения
- 21. Что означает это регулярное выражение?/^ obj (\ d +) \ - {0,1} (| mi \ d {0,1} | critical | questionText | answerText \ - {0,1} \ d +) $/
- 22. Лучший способ проверить полуопределенные симметричные матрицы, хранящиеся в scipy разреженной матрице?
- 23. Создание случайных величин из смеси Weibull (0,1) и Uniform (0,1)
- 24. a {0,1} | b {0,1} соответствует только 'a', почему?
- 25. если 0,1 не имеет двоичное представление, почему я получаю 0,1
- 26. Swift: Печать координат от Firebase: 0,1 - 2,3 вместо 0,1 - 1,2
- 27. lua десятичные знаки разрываются вокруг -0,1 до 0,1 (эксклюзивно)
- 28. Почему 0,1 * 3 = 0,3
- 29. приращением на 0,1 Javascript
- 30. NSNumberFormatter с 0,1 выпуск
'triu (из них (5), 1) + triu (из них (5), 1) '' – obchardon