Is this a valid expression?
2 次查看(过去 30 天)
显示 更早的评论
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?
0 个评论
采纳的回答
Rik
2020-1-8
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 个评论
Guillaume
2020-1-8
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.
更多回答(1 个)
Guillaume
2020-1-8
编辑:Guillaume
2020-1-8
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));
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!