[Matlab] Waardes uit array toewijzen aan variabelen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • gop1
  • Registratie: Oktober 2013
  • Laatst online: 11-12-2024
Zijn er hier mensen bekend met Matlab?

Ik probeer de waardes uit een array (1 rij, variabel aantal kolommen) in variabelen op te slaan. Nu kan dit handmatig, maar het probleem is dat de afmeting van de array variabel is. Ik zou dus d.m.v. een for loop de waardes uit de array moeten toewijzen aan variabelen. De (naam van) de variabelen moet daarbij dus automatisch aangemaakt worden.
Voorbeeld:

Array A: [1 2 5 4] (in dit geval dus met een vast formaat)

for i = 1 : 1 : 4
Var(i) = A(i)
end

De bedoeling is dus dat er 4 variabelen zijn aangemaakt met de namen Var1, Var2, Var3 en Var4. Dit is echter niet wat er gebeurt, want het enige wat ik hiermee doe is dat de waarden uit de array A worden overgezet naar de array Var.

Iemand enig idee hoe ik dit kan doen?

Alle reacties


Acties:
  • +1 Henk 'm!

  • DaQ
  • Registratie: December 2007
  • Niet online

DaQ

Je kunt hiervoor 'assignin' (of 'evalin') gebruiken.

code:
1
2
3
4
A = [1 2 5 4]
for n = 1:4
    assignin('caller',"Var"+n,A(n))
end


Maar echt nette code zul je er niet door krijgen. Je kunt misschien beter (blijven) indexeren.

[ Voor 22% gewijzigd door DaQ op 08-11-2018 16:17 ]


Acties:
  • +1 Henk 'm!

  • kruimel0
  • Registratie: Oktober 2014
  • Laatst online: 23-04 17:04
Het is mogelijk (http://matlab.wikia.com/w....2C....2CA10_in_a_loop.3F), maar ik ben het met DaQ eens dat het niet mooi is.

Acties:
  • 0 Henk 'm!

  • gop1
  • Registratie: Oktober 2013
  • Laatst online: 11-12-2024
DaQ schreef op donderdag 8 november 2018 @ 16:09:
Je kunt hiervoor 'assignin' (of 'evalin') gebruiken.

code:
1
2
3
4
A = [1 2 5 4]
for n = 1:4
    assignin('caller',"Var"+n,A(n))
end


Maar echt nette code zul je er niet door krijgen. Je kunt misschien beter (blijven) indexeren.
Dit werkt perfect, bedankt.
Enig idee hoe ik de gecreëerde variabelen vervolgens kan aanroepen (gegeven het feit dat het aantal variabel is)?

Acties:
  • 0 Henk 'm!

  • bwerg
  • Registratie: Januari 2009
  • Niet online

bwerg

Internettrol

De hele tijd alles gaan eval-en (of soortgelijke functies als assignin).

Maar is er een reden dat dit per sé zo moet? Het standaardadvies aan iedereen die begint met programmeren: gebruik nooit eval en soortgelijken (zoals assignin)*. Zonder eval is elke programmeertaal krachtig genoeg om een variabel aantal waarden te kunnen gebruiken, namelijk gewoon met arrays... Je kun al bij waarde n met A(n), dus waarom zou dat nog in een losse variabele moeten? ;)

*Er zijn vast uitzonderingen te bedenken, maar dan alleen als je de alternatieven goed genoeg kent om de voor- en nadelen af te wegen. Tot die tijd, niet doen.

Heeft geen speciale krachten en is daar erg boos over.


Acties:
  • 0 Henk 'm!

  • Harrie
  • Registratie: November 2000
  • Laatst online: 20:16

Harrie

NederVlaming

gop1 schreef op donderdag 8 november 2018 @ 17:07:
[...]


Dit werkt perfect, bedankt.
Enig idee hoe ik de gecreëerde variabelen vervolgens kan aanroepen (gegeven het feit dat het aantal variabel is)?
Het aantal kan je toch opvragen met "length(A)" of "sizeof(A,1)" ?

Edit: ah, ik snap nu pas je probleem... De variabele namen is geen vaste set natuurlijk.

Maar ik zou ook proberen weg te blijven van dit soort rare constructies.

[ Voor 20% gewijzigd door Harrie op 08-11-2018 18:01 ]


Acties:
  • 0 Henk 'm!

  • gop1
  • Registratie: Oktober 2013
  • Laatst online: 11-12-2024
bwerg schreef op donderdag 8 november 2018 @ 17:53:
De hele tijd alles gaan eval-en (of soortgelijke functies als assignin).

Maar is er een reden dat dit per sé zo moet? Het standaardadvies aan iedereen die begint met programmeren: gebruik nooit eval en soortgelijken (zoals assignin)*. Zonder eval is elke programmeertaal krachtig genoeg om een variabel aantal waarden te kunnen gebruiken, namelijk gewoon met arrays... Je kun al bij waarde n met A(n), dus waarom zou dat nog in een losse variabele moeten? ;)

*Er zijn vast uitzonderingen te bedenken, maar dan alleen als je de alternatieven goed genoeg kent om de voor- en nadelen af te wegen. Tot die tijd, niet doen.
Of het persé zo moet weet ik niet, maar ik wil de waarden in ieder geval kunnen weergeven. Het gaat in dit geval om het bepalen van de lengte van lijnen. De lijnen woorden gecreëerd door op een kaart te klikken (willekeurig aantal). Ik wil de totale lengte van de lijnen hebben en de lengte van de lijnen afzonderlijk.

Het is erg vergelijkbaar met de functie "afstand meten" in Google Maps

Acties:
  • +2 Henk 'm!

  • bwerg
  • Registratie: Januari 2009
  • Niet online

bwerg

Internettrol

gop1 schreef op donderdag 8 november 2018 @ 18:24:
[...]


Of het persé zo moet weet ik niet
In dat geval: nee, het moet niet zo. ;) De waarden staan al mooi in een array, dus die kun je direct gebruiken. Als je waarde n nodig hebt, gebruik je gewoon A(n), en je bent klaar. Kom je ooit in de situatie waarin de waarden nog niet in een array staan (bijvoorbeeld n getallen vragen aan de gebruiker), ook dan liever een array van lengte n aanmaken dan een variabel aantal variabelen.

Zie ook de link van kruimel0, naar de FAQ van matlab:
How can I create variables A1, A2,...,A10 in a loop?
Please don't do this! You will find that MATLAB arrays (either numeric or cell) will let you do the same thing in a much faster, much more readable way.

[ Voor 43% gewijzigd door bwerg op 08-11-2018 18:41 ]

Heeft geen speciale krachten en is daar erg boos over.


Acties:
  • +2 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 22:19

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Maar hoezo moet je daarvoor die waardes uit de array trekken en in een variabele set variabelen stoppen? Dat klinkt alsof je het jezelf onnodig ontzettend moeilijk maakt?

Wat bwerg in "[Matlab] Waardes uit array toewijzen aan variabelen" zegt dus.

[ Voor 24% gewijzigd door Orion84 op 08-11-2018 18:37 ]

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • gop1
  • Registratie: Oktober 2013
  • Laatst online: 11-12-2024
@Orion84 en @bwerg Het programma is nog niet af, maar ik wil in een later stadium grafisch op de kaart gaan weergeven (plotten o.i.d.) wat de lengte van elke lijn is. Het leek me handig om daarvoor de maten alvast beschikbaar te hebben in variabelen, zodat deze eenvoudig opgeroepen kunnen worden. Maar wat jullie zeggen klinkt inderdaad logisch, de waarden zijn al beschikbaar en kunnen direct vanuit de array opgeroepen worden.
Pagina: 1