Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

[Matlab] Waardes uit array toewijzen aan variabelen

Pagina: 1
Acties:

Vraag


  • gop1
  • Registratie: oktober 2013
  • Laatst online: 20-06 10:52
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: 21:09
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: 20-06 10:52
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
  • Laatst online: 22:20

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]

F1TV 20% korting hier


  • gop1
  • Registratie: oktober 2013
  • Laatst online: 20-06 10:52
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
  • Laatst online: 14:56

Orion84

Admin General Chat

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: 20-06 10:52
@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


Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Microsoft Xbox Series X LG CX Google Pixel 5a 5G Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True