Hey, here is an ipython notebook with benchmarks of all implementations (scroll to the bottom for plots):
https://github.com/sotte/ipynb_snippets/blob/master/2015-05%20gridspace%20-%20cartesian.ipynb Overall, Jaime's version is the fastest. On Tue, May 12, 2015 at 2:01 PM Jaime Fernández del Río < jaime.f...@gmail.com> wrote: > On Tue, May 12, 2015 at 1:17 AM, Stefan Otte <stefan.o...@gmail.com> > wrote: > >> Hello, >> >> indeed I was looking for the cartesian product. >> >> I timed the two stackoverflow answers and the winner is not quite as >> clear: >> >> n_elements: 10 cartesian 0.00427 cartesian2 0.00172 >> n_elements: 100 cartesian 0.02758 cartesian2 0.01044 >> n_elements: 1000 cartesian 0.97628 cartesian2 1.12145 >> n_elements: 5000 cartesian 17.14133 cartesian2 31.12241 >> >> (This is for two arrays as parameters: np.linspace(0, 1, n_elements)) >> cartesian2 seems to be slower for bigger. >> > > On my system, the following variation on Pauli's answer is 2-4x faster > than his for your test cases: > > def cartesian4(arrays, out=None): > arrays = [np.asarray(x).ravel() for x in arrays] > dtype = np.result_type(*arrays) > > n = np.prod([arr.size for arr in arrays]) > if out is None: > out = np.empty((len(arrays), n), dtype=dtype) > else: > out = out.T > > for j, arr in enumerate(arrays): > n /= arr.size > out.shape = (len(arrays), -1, arr.size, n) > out[j] = arr[np.newaxis, :, np.newaxis] > out.shape = (len(arrays), -1) > > return out.T > > >> I'd really appreciate if this was be part of numpy. Should I create a >> pull request? >> > > There hasn't been any opposition, quite the contrary, so yes, I would go > ahead an create that PR. I somehow feel this belongs with the set > operations, rather than with the indexing ones. Other thoughts? > > Also for consideration: should it work on flattened arrays? or should we > give it an axis argument, and then "broadcast on the rest", a la > generalized ufunc? > > Jaime > > -- > (\__/) > ( O.o) > ( > <) Este es Conejo. Copia a Conejo en tu firma y ayúdale en sus planes > de dominación mundial. > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@scipy.org > http://mail.scipy.org/mailman/listinfo/numpy-discussion >
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion