Seite 1 von 1

Einzelne Werte mit -1 multiplizieren

Verfasst: Fr Dez 16, 2016 11:25 am
von FridaKoriander
Bildschirmfoto 2016-12-16 um 11.21.15.png
Hallo zusammen!

Ich müsste in meinem Datensatz (s. Anhang) alle Reaktionszeiten (rt) der nicht korrekten Antworten (corr = 0) mit -1 multiplizieren. Kann mir da jemand weiterhelfen....?

Vielen Dank schon mal und viele Grüße!

Re: Einzelne Werte mit -1 multiplizieren

Verfasst: Fr Dez 16, 2016 11:35 am
von jogo
Hallo Frida,

eine Möglichkeit ist:

Code: Alles auswählen

test$rt[test$corr==0] <- -test$rt[test$corr==0]
eine andere Möglichkeit:

Code: Alles auswählen

test <- within(test, rt <- ifelse(corr==0, -rt, rt))
oder

Code: Alles auswählen

test$rt <- with(test, ifelse(corr==0, -rt, rt))
Viele Grüße, Jörg

Re: Einzelne Werte mit -1 multiplizieren

Verfasst: Fr Dez 16, 2016 2:06 pm
von bigben
Hey Jörg, hast Du

Code: Alles auswählen

test$rt <- test$rt*(1 - 2*[test$corr==0]) 
vergessen?

LG,
Bernhard

Re: Einzelne Werte mit -1 multiplizieren

Verfasst: Fr Dez 16, 2016 2:21 pm
von jogo
bigben hat geschrieben:Hey Jörg, hast Du

Code: Alles auswählen

test$rt <- test$rt*(1 - 2*[test$corr==0]) 
vergessen?
jein, eher habe ich so eine Lösung nicht in Erwägung gezogen.
Als ich programmieren gelernt habe, lautete ein Grundsatz: Multiplikationen sind teuer

Meine Vorschläge kommen ganz ohne Multiplikationen aus. Ich bin sogar der Meinung, dass ich mich an die von Dir ausgerufene Programmiermaxime gehalten habe und sozusagen kantig programmiert habe. :lol:

Sicher gibt es noch viele andere Möglichkeiten, um das genannte Problem zu lösen.

Viele Grüße
Jörg

Re: Einzelne Werte mit -1 multiplizieren

Verfasst: Fr Dez 16, 2016 3:25 pm
von FridaKoriander
Hallo zusammen :-)

vielen Dank für die Hilfe!
Es hat mit Jörgs ersten Vorschlag gut geklappt.

Viele Grüße!

Re: Einzelne Werte mit -1 multiplizieren

Verfasst: Fr Dez 16, 2016 3:52 pm
von bigben
@jogo: "-rt" ist keine Multiplikation?

Re: Einzelne Werte mit -1 multiplizieren

Verfasst: Fr Dez 16, 2016 4:06 pm
von jogo
bigben hat geschrieben:@jogo: "-rt" ist keine Multiplikation?
wenn das mit der internen Zahlendarstellung immer noch so ist, wie ich es gelernt habe, dann ist es nur ein Invertieren des Vorzeichenbits.

https://en.wikipedia.org/wiki/IEEE_floating_point
https://de.wikipedia.org/wiki/IEEE_754#Allgemeines

R scheint hier aber eine tolle Leistung beim Interpreter abzuliefern:

Code: Alles auswählen

library(microbenchmark)

x <- rnorm(10000)
microbenchmark(m0= 0-x, chsign= -x, mult= -1*x, mult.dec=-1.0*x, mult2=2.1*x, times=1000)
Die Spezifik der Multiplikationen -1*x und -1.0*x wird erkannt und ist schneller als eine normale Multiplikation wie z.B. mult2.

Nachtrag: komisch, bei einem weiteren Lauf war auch mult2 kaum langsamer.

Viele Grüße, Jörg

Re: Einzelne Werte mit -1 multiplizieren

Verfasst: Fr Dez 16, 2016 9:59 pm
von bigben
Hallo Jörg,

ich hätte nicht gedacht, dass ein Interpreter soweit optimiert und diese Fälle unterscheidet. Die Fallunterscheidung kostet dann ja bei jeder Multiplikation wieder CPU-Zyklen. Entweder unterschätzen ich, wie teuer Multiplikationen sind, oder ich unterschätzen, wie oft dieser Spezialfall vorkommt.

Liebe Grüße,
Bernhard

Re: Einzelne Werte mit -1 multiplizieren

Verfasst: Sa Dez 17, 2016 11:40 am
von jogo
Hallo Bernhard,
bigben hat geschrieben:ich hätte nicht gedacht, dass ein Interpreter soweit optimiert und diese Fälle unterscheidet. Die Fallunterscheidung kostet dann ja bei jeder Multiplikation wieder CPU-Zyklen.
vielleicht muss der Interpreter nur einmal über die Eingabezeile drüber; oder hackt das Paket microbenchmark den R-Interpreter?
Entweder unterschätzen ich, wie teuer Multiplikationen sind, oder ich unterschätzen, wie oft dieser Spezialfall vorkommt.
oder hier hat sich in den vergangenen 30 Jahren etwas bei den Prozessoren getan, dass eine multiplikation nicht merklich teurer ist als eine einfache Bit-Operation.
Oder der Interpreter löst den Vorzeichenoperator auch nur in eine Multiplikation auf, womit Du Recht hättest mit "-x ist eine Multiplikation".

Liebe Grüße,
Jörg

Re: Einzelne Werte mit -1 multiplizieren

Verfasst: So Dez 18, 2016 8:15 am
von bigben
Jedenfalls hast Du sehr schön kantig programmiert!