Version plus rapide / remplacement de `Select []`
Sep 23 2020
J'ai le code suivant:
atime = AbsoluteTiming;
{a, b, n} = {2, 1, 3000};
pts = RandomReal[{-a, a}, {3/2 n, 2}]; // atime
k = b/a; // atime
pts = Map[{#[[1]], k #[[2]]} &, pts]; // atime
pts = Select[pts, (#[[1]]^2/a^2 + #[[2]]^2/b^2 <= 1) &]; // atime
pts = Take[pts, n]; // atime
Graphics[pts // Point] // atime
Clear[a, b, n, pts, k]
qui produit ceci:
Nous voyons que presque tout le temps ici a été consacré Select[]. Existe-t-il une version / remplacement plus rapide de Select[]? (Je suis au courant RandomPoint[Disk[{0, 0}, {a, b}], n], mais le but de cette question concerne une version plus rapide de Select[].)
Réponses
2 kglr Sep 23 2020 at 04:25
SeedRandom[1]
pts = RandomReal[{-a, a}, {3/2 n, 2}];
pts1 = Pick[pts, UnitStep[1 - (pts^2 .( 1/{a, b}^2))], 1]; // atime // First
0.0002691
pts2 = Select[pts, (#[[1]]^2/a^2 + #[[2]]^2/b^2 <= 1) &]; // atime // First
0.0346072
pts1 == pts2
True