Azzera filtri
Azzera filtri

How can i access field values of a struct by indexing?

7 visualizzazioni (ultimi 30 giorni)
My struct has several fields containing a matrix. How can I get the first 100 values of each field without using a for loop.
a = b.(fieldnames(b))(1:100,:); % wont work
  1 Commento
Rik
Rik il 6 Nov 2017
Playing around with struct2cell or struct2table could probably solve this.

Accedi per commentare.

Risposta accettata

Walter Roberson
Walter Roberson il 6 Nov 2017
a = structfun(@(F) F(1:100,:), b, 'uniform', 0)
  4 Commenti
Rik
Rik il 26 Gen 2021
That is true in general. The best you can hope for is parity (given proper pre-allocation). Every function that hides a loop (cellfun, arrayfun, etc) will have an overhead. Matlab is getting better and better at for-loops.
The only exception to this rule is if you have actual array operations:
%slow:
s=0;for n=1:numel(data),s=s+data(n);end
%fast
s=sum(data);
Walter Roberson
Walter Roberson il 26 Gen 2021
Anonymous functions are more expensive than plain function handles such as @sin

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by