Is this a valid expression?

3 visualizaciones (últimos 30 días)
Salad Box
Salad Box el 8 de En. de 2020
Comentada: Guillaume el 8 de En. de 2020
Hi
offsets = [32 48 64 80 96 112];
[X,Y,Z] = ndgrid([-1, 0, 1]);
offsetArray = [Z(:), Y(:), X(:)];
offsetArray(sum( offsetArray == [0, 0, 0], 2 ) == 3, :) = [];
I'm wondering whether below is a valid expression since I see a red tilde warning sign below the left bracket after the transpose sign in below
tmpOffsets = repmat( offsets(:), [1, size( offsetArray, 1 )] )'(:);
And the error message says
tmpOffsets = repmat( offsets(:), [1, size( offsetArray, 1 )] )'(:);
Error: Invalid expression. When calling a function or indexing a variable, use parentheses. Otherwise, check for mismatched delimiters.
What could possibly went wrong?

Respuesta aceptada

Rik
Rik el 8 de En. de 2020
You can't index the output of the transpose function like that. You can either do it explicitly in multiple steps, or use the function syntax:
%option 1:
tmpOffsets = repmat( offsets(:), [1, size( offsetArray, 1 )] );
tmpOffsets = tmpOffsets';
tmpOffsets = tmpOffsets(:);
%option 2:
tmpOffsets= reshape(permute(repmat( offsets(:), [1, size( offsetArray, 1 )] ),[2 1]),[],1);
I would go for option 1, because it is much easier to see what is happening.
  1 comentario
Guillaume
Guillaume el 8 de En. de 2020
Note: for the record, option 3 is simpler and even easier to see what is happening:
tmpOffsets = repelem(offsets(:), size(offsetArray, 1));
should be marginally faster as well.

Iniciar sesión para comentar.

Más respuestas (1)

Guillaume
Guillaume el 8 de En. de 2020
Editada: Guillaume el 8 de En. de 2020
As matlab tells you is not valid, you can't have (:) on the output of a function. Since (:) is simple a reshape,
tmpOffsets = reshape(repmat( offsets(:), [1, size( offsetArray, 1 )] )', [], 1);
would work.
edit: on the other hand, the above is simply:
tmpOffsets = repelem(offsets(:), size(offsetArray, 1));
  1 comentario
Salad Box
Salad Box el 8 de En. de 2020
Many thanks! Your solutions are also perfect for this task!

Iniciar sesión para comentar.

Categorías

Más información sobre Logical 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