3 ms·
> "As a matter of comparison, Cython does not support principles 1, 2, or 3 and has optional support for 4." For 2 Type agnosticism, this can be emulated with
by geoalchimista 9y ago
> "As a matter of comparison, Cython does not support principles 1, 2, or 3 and has optional support
for 4."
For 2 Type agnosticism, this can be emulated with a "fused type" in Cython. See this example: http://cython.readthedocs.io/en/latest/src/userguide/numpy_tutorial.html#more-generic-code http://cython.readthedocs.io/en/latest/src/userguide/numpy_t...
But I think the major inconvenience with Cython vectorization is really not about `float32` and `float64`. You get `float64` NumPy array by default from floating-point calculations. The actual inconvenience is that the vectorized function cannot take a scalar input like the NumPy ones. To remain polymorphic, I usually have to perform an `is_scalar` check on the input in a Python wrapper before sending the input data to the Cython function.
- targafarian 9y agoNote that the alternative in Numba is incredibly convenient, where you can trivially create a function where the body of the function operates on a scalar, but then using the @vectorize decorator which makes it into a numpy ufunc automatically. This generalizes the function to operate equally well on scalars or numpy arrays of any dimensionality (just like "built-in" numpy functions do). Oh, and if you use set target='gpu', your function also works on GPUs, too. Or you can use target='parallel' to make it parallelize automatically across CPU cores.