Working with a set of matrices

7 visualizaciones (últimos 30 días)
Lorcan O'Connor
Lorcan O'Connor el 3 de Abr. de 2021
Comentada: Lorcan O'Connor el 3 de Abr. de 2021
I want to generate a finite matrix group by starting with the S ={identity} and multiplying by some generators until S no longer grows in size.
Is there an efficient way to deal with a "set" like this, without manualling checking for duplicates? For example, it seems awkward if you use cell arrays to store the elements of S.
  2 comentarios
Matt J
Matt J el 3 de Abr. de 2021
For example, it seems awkward if you use cell arrays to store the elements of S.
Why?
Lorcan O'Connor
Lorcan O'Connor el 3 de Abr. de 2021
Well say I multiply everything in the cell array by a matrix and only want to take the new elements, how do I efficiently take a “set Union” (or even check if a matrix is in the array), without just looping and checking everything?

Iniciar sesión para comentar.

Respuesta aceptada

Matt J
Matt J el 3 de Abr. de 2021
Editada: Matt J el 3 de Abr. de 2021
I'm not sure I will fully understand the task without seeing an example. However, if S is organized as an MxNxP array,
[M,N]=deal(3,3);
S=cat(3,eye(M,N), randi(5,M,N), eye(M,N) )
S =
S(:,:,1) = 1 0 0 0 1 0 0 0 1 S(:,:,2) = 4 5 4 2 1 3 1 5 2 S(:,:,3) = 1 0 0 0 1 0 0 0 1
then you can get rid of duplicate slices with
s=reshape(S,[],size(S,3));
S=reshape( unique(s.','rows').', M,N,[])
S =
S(:,:,1) = 1 0 0 0 1 0 0 0 1 S(:,:,2) = 4 5 4 2 1 3 1 5 2
If S contains non-integer matrices, you will probably need to use uniquetol() instead of unique().
  1 comentario
Lorcan O'Connor
Lorcan O'Connor el 3 de Abr. de 2021
Thanks a lot that's exactly what I needed

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by