Is there something like 'array colon'? in other words how can I apply colon operator to all the elements of an array (please read the text below so my question will make sense)?

4 次查看(过去 30 天)
A = [1 10 16 23];
A-3:A+2 will result in [-2,-1,0,1,2,3]; In other words colon operates only on the first element of array A. However I want to apply A-3:A+2 on all the elements of A; I know I can get this by a loop, like :
u=[];for i=1:4, u=[u,A(i)-3:A(i)+2]; end
However I wonder if there is a way to do this without using loop. (The actual array I am working with is too long to loop through it.)
This sounds like a super simple question but I have no ides how to do it in a simple way (other than looping).
I so much appreciate any help.

采纳的回答

Matt Fig
Matt Fig 2012-10-28
A = [1 10 16 23];
u = reshape(bsxfun(@plus,A,(-3:2).'),1,[])

更多回答(3 个)

Azzi Abdelmalek
Azzi Abdelmalek 2012-10-28
编辑:Azzi Abdelmalek 2012-10-28
do you mean a division
A = [1 10 15 23];
(A-3)./(A+2 )
  4 个评论

请先登录,再进行评论。


Jan
Jan 2012-10-28
  2 个评论
Farzaneh
Farzaneh 2012-10-28
When I use mcolon , it gives me this error:
Undefined function 'getclassidmex' for input arguments of type 'double'.
Error in castarrays (line 16) id = getclassidmex(varargout{:}); % get id from 1-12, ordered like numclass
Error in mcolon (line 50) [i1,d,i2] = castarrays(i1(:),d(:),i2(:));
Matt Fig
Matt Fig 2012-10-28
MCOLON is a mex function that must be compiled. You don't need MCOLON to do what you want to do here anyway. See my solution.

请先登录,再进行评论。


Chris A
Chris A 2012-10-28
编辑:Chris A 2012-10-28
Here is one way to do this:
A = [1 10 16 23];
res=reshape(repmat((-3:2)',1,numel(A))+repmat(A,6,1),[],1);

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by