Access a single element of an anonymous function that returns an array

조회 수: 23 (최근 30일)
I have an anonymous function that returns an array. I'd like to be able to create a new anonymous function that consists of a single element of this array WITHOUT using matlabfunction (which is infuriatingly restrictive in several respects).
For example, consider the following code (it's a ridiculously simple example, for expository purposes, obviously there are easy ways of dealing with this example, but my real problem is more complex)
y = sym('y',[1,4])
f = @(y)[y(1);y(2);y(3);y(4)]
f(y)
which returns
ans =
y1
y2
y3
y4
I'd now like to define a new anonymous function which extracts, say, the third element of this array. Obviously,
g = @(y) f(y)(3)
won't work. Is there some way to accomplish this? Again, solns involving matlabfunction are not satisfactory.
Any suggestions would be most appreciated!
Leo

채택된 답변

Walter Roberson
Walter Roberson 2014년 4월 27일
indexat = @(expr, index) expr(index);
g = @(y) indexat(f(y), 3);
  댓글 수: 2
Leo Simon
Leo Simon 2014년 4월 27일
Fabulous, thanks very much Walter, works beautifully
Stephen23
Stephen23 2020년 4월 7일
"could you please explain what you mean by "expr" and "index"? "
They are the input arguments of an anonymous function:

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

추가 답변 (1개)

Lauren Barr
Lauren Barr 2020년 4월 20일
This is really helpful, thank you! I was wondering if there is a way to extend it, so that I can index one particular value in a 2D matrix, instead of indexing into a vector?
For example, this doesn't seem to work:
indexat = @(expr, index) expr(index);
g = @(y) indexat(f(y), (1,3));
But maybe I am missing something obvious.
Thank you!
Lauren

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by