Is this a valid expression?

4 Ansichten (letzte 30 Tage)
Salad Box
Salad Box am 8 Jan. 2020
Kommentiert: Guillaume am 8 Jan. 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?

Akzeptierte Antwort

Rik
Rik am 8 Jan. 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 Kommentar
Guillaume
Guillaume am 8 Jan. 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Guillaume
Guillaume am 8 Jan. 2020
Bearbeitet: Guillaume am 8 Jan. 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 Kommentar
Salad Box
Salad Box am 8 Jan. 2020
Many thanks! Your solutions are also perfect for this task!

Melden Sie sich an, um zu kommentieren.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by