I am creating a random 3d data set in Matematica 12.1. Then I am selecting all points that are in a certain range of one axis.
The same I am doing in Python (same computer, Python 3.8.5, numpy 1.19.2)
RESULT: It seems that Python is able to select much faster (1.7 sec) than Mathematica (5.2 sec). What is the reason for that? For selection in Mathematica I used the fastest solution, which is by Carl Woll (see here at bottom).
SeedRandom[1]; coordinates = RandomReal[10, {100000000, 3}]; selectedCoordinates = Pick[coordinates, Unitize@Clip[coordinates[[All, 1]], {6, 7}, {0, 0}], 1]; // AbsoluteTiming {5.16326, Null} Dimensions[coordinates] {100000000, 3} Dimensions[selectedCoordinates] {10003201, 3}
PYTHON CODE:
import time import numpy as np np.random.seed(1) coordinates = np.random.random_sample((100000000,3))*10 start = time.time() selectedCoordinates = coordinates[(coordinates[:,0] > 6) & (coordinates[:,0] < 7)] end = time.time() print(end-start) print(coordinates.shape) print(selectedCoordinates.shape) 1.6979997158050537 (100000000, 3) (9997954, 3)