Sätta första elementet i en vektor till samma som andra värdet i matlab

Permalänk
Entusiast

Sätta första elementet i en vektor till samma som andra värdet i matlab

Jag har en vektor med längden n. Den kan vara allt från 10 till 100000 element lång så koden måste vara generell. Det jag vill göra är att ändra första och sista värdet i vektorn så att de blir samma som det andra värdet respektive näst sista. Just nu har jag en rad som ser ut ungefär så här:

a = [a(2),a(2:end-1),a(end-1)]

Den raden fungerar men verkar ta väldigt mycket resurser. Jag hade en körning igång nu över natten och efter 15 timmar stod den raden för 90 % av körtiden. Det som tar näst längst tid är ett funktionsanrop som gör en enkel algebraisk beräkning tar bara 5 % av körtiden och den raden anropas lika många gånger.

Så finns det ett bättre sätt att lösa det för just nu känns det väldigt ineffektivt. Den enda jag kan komma på är en if-sats som bara kör den specifika raden när den behövs, det vill säga när jag räknar med värdet i 2 och n-1. Ogillar dock att slänga in en till if-sats i en ganska stor gröt av loopar som redan finns.

Visa signatur

Q9450, HD4850, 8 GB DDR2 800 MHz, 3x750 GB, Antec 300, Dell 2408WFP, U2410, Qnap TS-419p+ 4x2 TB Samsung F4, Asus UL30A-QX056V, Logitech Z-680, Sennheiser HD380pro, M-Audio FastTrack Pro, Ibanez sa160qm, Ibanez TB 15R, Zoom 505II, Ibanez GSR 200, Ibanez SW 35, Cort AC-15, Squier SD-3 BBL, Yamaha PSR 270, Røde NT1-A, Nikon D200, Nikkor 18-70/3,5-4,5, 70-300VR, 50/1,8, 28/2,8, Tamron 17-50/2,8, 90/2,8, Sigma 30/1,4, SB-800, SB-25, SB-24

Permalänk
Medlem

Vad är det för fel på

a(1)=a(2);
a(end)=a(end-1);

Permalänk
Medlem

Det var ganska länge sen jag höll på med matlab nu, men blir det någon skillnad i resursanvändning om du iställer gör:

a(1) = a(2); a(end) = a(end-1);

Jag kan tänka mig att den i ditt fall skapar en ny temporär vektor som ser ut som det inom hakparanteserna och sedan tilldelar den till a, medan i fallet ovan så ersätter den bara 2st element.

Permalänk
Entusiast
Skrivet av xale89:

Vad är det för fel på

a(1)=a(2);
a(end)=a(end-1);

Skrivet av pelleplu:

Det var ganska länge sen jag höll på med matlab nu, men blir det någon skillnad i resursanvändning om du iställer gör:

a(1) = a(2); a(end) = a(end-1);

Jag kan tänka mig att den i ditt fall skapar en ny temporär vektor som ser ut som det inom hakparanteserna och sedan tilldelar den till a, medan i fallet ovan så ersätter den bara 2st element.

Ja det är ju oändligt mycket smidigare. Förstår inte varför jag krånglade till det för mig själv så mycket. Ska genast slänga in det och se om det blir någon skillnad. Tack så mycket.

Visa signatur

Q9450, HD4850, 8 GB DDR2 800 MHz, 3x750 GB, Antec 300, Dell 2408WFP, U2410, Qnap TS-419p+ 4x2 TB Samsung F4, Asus UL30A-QX056V, Logitech Z-680, Sennheiser HD380pro, M-Audio FastTrack Pro, Ibanez sa160qm, Ibanez TB 15R, Zoom 505II, Ibanez GSR 200, Ibanez SW 35, Cort AC-15, Squier SD-3 BBL, Yamaha PSR 270, Røde NT1-A, Nikon D200, Nikkor 18-70/3,5-4,5, 70-300VR, 50/1,8, 28/2,8, Tamron 17-50/2,8, 90/2,8, Sigma 30/1,4, SB-800, SB-25, SB-24