Toon posts:

[Matlab] Waardes uit array toewijzen aan variabelen

Pagina: 1
Acties:

Vraag


  • gop1
  • Registratie: Oktober 2013
  • Laatst online: 22-03 06:45
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


  • DaQ
  • Registratie: December 2007
  • Niet online
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]


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

  • gop1
  • Registratie: Oktober 2013
  • Laatst online: 22-03 06:45
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)?

  • 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.


  • Harrie
  • Registratie: November 2000
  • Nu online

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]


  • gop1
  • Registratie: Oktober 2013
  • Laatst online: 22-03 06:45
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

  • 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.


  • Orion84
  • Registratie: April 2002
  • Nu online

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


  • gop1
  • Registratie: Oktober 2013
  • Laatst online: 22-03 06:45
@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


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee