Borrar filtros
Borrar filtros

All Possible Matrix Permutations

2 visualizaciones (últimos 30 días)
Shawn Cooper
Shawn Cooper el 18 de Jun. de 2020
Comentada: Akira Agata el 19 de Jun. de 2020
I am trying to write a program that takes integers (or any value, really) and square matrix size m as inputs and returns all possible mxm matrices with those inputs as matrix entries. It would look something like this example input:
allMatrices([0 1],2)
Which would return all 2x2 matrices with 0 and 1 as matrix entries ([0 0; 0 0], [0 0; 0 1], [0 0; 1 1], etc). I would also like to store the matrices so that they can be called individually (M_1, M_2, and so on).
My current strategy is to use
A = unique(nchoosek(repmat('10', 1,4), 4), 'rows')
This lets me index the values A(1:4) as characters for the first 4 entries in a 2x2 matrix, at which point I can use a for-loop to index the remaining entries.
I need to know how to go from my 4 character array ('0000') to a 2x2 matrix ([0 0;0 0]).
And, as always, if there is a more elegant way to do this, please let me know.
Thanks!

Respuesta aceptada

Ameer Hamza
Ameer Hamza el 18 de Jun. de 2020
Editada: Ameer Hamza el 18 de Jun. de 2020
Starting with char array '10' to create such matrices does not seems to be a good strategy. It is possible, but better to use numeric datatypes from the beginning.
The following code creates a 3D matrix with all possible permutation along the 3rd dimension.
N = 2;
n2 = N^2;
x = repmat({[0, 1]}, 1, n2);
M = reshape(combvec(x{:}), 2, 2, []);
Result
>> M(:,:,1)
ans =
0 0
0 0
>> M(:,:,2)
ans =
1 0
0 0
>> M(:,:,5)
ans =
0 1
0 0
>> M(:,:,end)
ans =
1 1
1 1
It shows a few permutations of the matrix.
  3 comentarios
Ameer Hamza
Ameer Hamza el 18 de Jun. de 2020
I am glad to be of help!
Akira Agata
Akira Agata el 19 de Jun. de 2020
+1
If you don't have Deep Learning Toolbox, one possible workaround will be like this:
[p,q,r,s] = ndgrid([0 1]);
C = mat2cell([p(:),q(:),r(:),s(:)],ones(numel(p),1));
M = cellfun(@(x) reshape(x,[2 2]),C,'UniformOutput',false);
Result is:
>> M{1}
ans =
0 0
0 0
>> M{2}
ans =
1 0
0 0
...
>> M{end}
ans =
1 1
1 1

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Resizing and Reshaping Matrices en Help Center y File Exchange.

Productos


Versión

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by