Selecting Value in matrix already indexed

1 Ansicht (letzte 30 Tage)
Raphaël
Raphaël am 15 Mai 2018
Kommentiert: Raphaël am 15 Mai 2018
Hi, I'm trying to something relatively simple. Is there a way to select certain value in an already indexed matrix. Here is a simplified exemple of what I want to do.
A = rand(3);
B = @(x) A + x.^2; %Where x is a vector 3x1. Result is thus a 3x3 matrix.
C = @(x) B(x)(:,1:2); %I want C to be the first two columns of the result of B(x)
Obsiously, B(x)(:,1:2) isn't a valid way to write things. Is there a way to do this without finding a work around?
Thanks for the help.
RMT
  1 Kommentar
Stephen23
Stephen23 am 15 Mai 2018
@Raphael: is there a particular requirement to use anonymous functions? You could get around this quite easily by writing a normal function in an Mfile.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Stephen23
Stephen23 am 15 Mai 2018
Bearbeitet: Stephen23 am 15 Mai 2018
Some options:
1. avoid the situation by defining a function in an Mfile. This is the simplest and probably most efficient solution.
2. call subsref directly to do the indexing:
>> A = rand(3);
>> Bf = @(x) bsxfun(@plus,A,x.^2);
>> Cf = @(x) subsref(Bf(x),substruct('()',{':',1:2}));
>> Bf(1:3)
ans =
1.1974 4.4016 9.1932
1.6292 4.8217 9.0481
1.6670 4.1590 9.4776
>> Cf(1:3)
ans =
1.1974 4.4016
1.6292 4.8217
1.6670 4.1590
3. Define an intermediate function to do the indexing:
>> A = rand(3);
>> Bf = @(x) bsxfun(@plus,A,x.^2);
>> If = @(M) M(:,1:2);
>> Cf = @(x) If(Bf(x));
>> Bf(1:3)
ans =
1.5517 4.7931 9.7715
1.0754 4.6154 9.4393
1.6711 4.5820 9.2449
>> Cf(1:3)
ans =
1.5517 4.7931
1.0754 4.6154
1.6711 4.5820
  1 Kommentar
Raphaël
Raphaël am 15 Mai 2018
I like option 3, thanks.
But there's really no way to ask twice in a row an indexing. A(5)(3). I find it weird you don't have that option.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by