Question : est-il possible d'accélérer ce calcul ?
A chaque élément x[i] d'un vecteur de valeurs numériques, j'associe l'élément [i] correspondant d'un vecteur composé de fonctions simples de la seule variable x. Ces fonctions sont données sous forme d'une chaine de caractères de la forme "<expression>". Difficulté : ces fonctions sont toutes différentes (le calcul avec une même fonction est instantané).
Après plusieurs tentatives -utilisation de la fonction outer par exemple - je n'ai pas trouvé plus rapide que l'écriture triviale :
(calcul très long car il prend 23.5s pour 100000 valeurs)
La solution devrait être dans la vectorisation des expressions mais je n'ai pas trouvé !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #------------------------------------------- #test rm(list=ls(all=TRUE)) long1=100000 #nombre de lignes # #génération de valeurs et de fonctions pour test x1<-double(long1) x1<-seq(1.1,110,length=long1) #fonctions simples entre "" sexpr0<-character(long1) for (i in 1:long1) { sexpr0[i]<-paste("x*x+", as.character(i), ".0", sep="") } sexpr0[1] # "x*x+1.0" sexpr0[long1-1] # "x*x+99999.0" sexpr0[long1]# "x*x+100000.0" # y1<-double(long1) #------------------------------- #calcul de chaque valeur system.time(for (i in 1:long1) { x<-x1[i] y1[i]<-eval(parse(text=sexpr0[i])) }) x1[1] y1[1] #2.21 x1[long1-1] y1[long1-1] # 112098.8 x1[long1] y1[long1] # 112100
Partager