- Author
Sebastian Berg
- Contact
- Date
2015-07-14
- Status
draft
"""Impressive little thing how einsum + stride_tricks can beat numpys build in C functions | |
for correlate (for large data). (ok depending on the implementation of np.correlate, the | |
comparison is not fair, but still rather impressive that you can get comparable speeds) | |
""" | |
import numpy as np | |
import stride_tricks as st # stride_tricks.py gist | |
a = np.random.random((100,100,100)).ravel() | |
stamp = np.random.random((3,3,3)).ravel() |
# | |
# A Map reduce made from ufuncs and with nditer, a C-Api version | |
# would be very similar (but cleaner in some cases). This still creates | |
# some unnecessary temporaries, which may or may not slow down things a | |
# a bit for no reason | |
# | |
# WARNING : Mostly untested and I am not sure I would use it except to | |
# get the idea of how to implement a specialized version maybe. | |
This table includes the promotion rules for the basic numeric types. The only suprising rule is that 8-byte integers are considered to cast "safely" to f8 (and complex), which also shows up in these promotion rules (If there was an int128, it would be allowed to safely cast to float128!):
i1 | u1 | i2 | u2 | i4 | u4 | i8 | u8 | f2 | f4 | f8 | f16 | c8 | c16 | c32 |
---|
import numpy as np | |
from numpy import asarray, add, rollaxis, sort, arange | |
def percentile(a, q, limit=None, interpolation='linear', axis=None, | |
out=None, overwrite_input=False): | |
""" | |
Compute the qth percentile of the data along the specified axis. | |
Returns the qth percentile of the array elements. |
import operator | |
def normalize_index(index, ndim): | |
"""Does basic index normalization like numpy, disregards advanced indexing. | |
Parameters | |
---------- | |
index : tuple | |
Indexing tuple to normalize | |
ndim : int |
Downloading both files and running the cells (takes a while) should give you drop downs with the NumPy namespace (dark green names should be the ones that end up in the main numpy namespace).
After clicking one of them, tab will go to the next, and 1, 2, 3 , and 4 will allow to fairly quickly choose how you feel about the function. I left many blank (at least the ones that are not part of the main namespace). Then you press "save" and after gathering a few of them, maybe we can get some nice result out of the data.
Unfortunately the Jupyter widgets are failry slow, although with the keyboard it was not an issue for me.
My take on the categories: