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)?

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.

추가 답변 (3개)

do you mean a division
A = [1 10 15 23];
(A-3)./(A+2 )

댓글 수: 4

Thanks however I don't want to divide anything ... I want A-3 : A+2
Does that make sense?
what does that mean? expected result?
I'm not sur what you need
A = [1 10 15 23];
unique(cell2mat(arrayfun(@(x) x-3:x+2,A,'un',0)))

댓글을 달려면 로그인하십시오.

Jan
Jan 2012년 10월 28일

댓글 수: 2

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(:));
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);

댓글 수: 1

Thanks. It is similar to what Matt Fig suggested. however he suggested bsxfun which makes things easier than using repmat...

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Matrix Indexing에 대해 자세히 알아보기

태그

질문:

2012년 10월 28일

Community Treasure Hunt

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

Start Hunting!

Translated by