| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| | |
add quickselect algorithm and expose it via partition
|
| |
| |
| |
| |
| |
| | |
Partitioning is sufficient to obtain the median and is much faster.
In the case of overwrite_input=True the resulting array will not be
fully sorted anymore.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
A partition sorts the kth element into its sorted order and moves all
smaller elements before the kth element and all equal or greater
elements behind it.
The ordering of all elements in the partitions is undefined.
It is implemented via the introselection algorithm which has worst case
linear complexity compared to a full sort that has linearithmic
complexity.
The introselect algorithm uses a quickselect with median of three pivot
and falls back to a quickselect with median of median of five pivot if
no sufficient progress is made.
The pivots used during the search for the wanted kth element can
optionally be stored and reused for further partitionings of the array.
This is used by the python interface if an array of kth is provided to
the partitions function. This improves the performance of median and
which need to select two elements if the size of the array is even. A
percentile function interpolating between values also profits from this.
String selection is implemented in terms of quicksort which has the same
properties as a selection for now.
|
|/
|
|
|
|
|
|
| |
Some declarations that are not at the beginning of a block have slipped
into the code. This breaks compilation on Python3.4a1. The Numpy coding
standard also disallows that construct.
Closes #3598.
|
|\
| |
| | |
BUG: Fix test_operand_flags test.
|
| |
| |
| |
| |
| |
| |
| |
| | |
The test tests an inner loop in operand_flag_tests.c.src that expects
a long type, but it is tested using 'i8'. This fails when long is not
'i8'.
Closes #3363.
|
| | |
|
| | |
|
|\ \
| | |
| | | |
MAINT: move npy_is_aligned to common.h
|
| | |
| | |
| | |
| | |
| | |
| | | |
Use it for npy_is_aligned expecting alignments of the power of two.
Cuts down the time spent in _IsAligned by the testsuite relative
to the rest of multiarray.so from 0.6% to 0.4%
|
| | |
| | |
| | |
| | |
| | |
| | | |
also make it and some other alignment operators a bit faster by using
unsigned integers and bitwise and if possible.
Make use of npy_is_aligned in _IsAligned too.
|
| | |
| | |
| | |
| | | |
Signed-off-by: Yury V. Zaytsev <yury@shurup.com>
|
| |/
|/|
| |
| | |
Signed-off-by: Yury V. Zaytsev <yury@shurup.com>
|
|\ \
| | |
| | | |
ENH: use memchr for unit stride all/any
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Unroll the loop once and use pminub/pmaxub to save a slow pmovmskb
instruction. Improves performance by 50% on some AMD chips.
Also add a pure libc path using memcmp and memchr for non amd64 systems.
The libc path can be faster with a very modern cpu and libc version,
e.g. an i7 with glibc 2.17 is about 20% faster than our code but many
other tested platforms are much slower (2.12 xeon, core2duo) or same
speed (2.17 phenom).
The numpy code can be removed in future when faster libc versions and
cpus are more commonly available.
|
|/
|
|
| |
Deprecate np.testing.importall - it's pointless and partially broken.
|
|\
| |
| | |
ENH: inv/solve work with empty inner and others empty outer array
|
| |
| |
| |
| |
| |
| |
| | |
This makes the inverse of a 0x0 array simply be 0x0 again. It
also modifies the no-empty array check in favor of a no-empty
*inner* array, since the gufuncs seem to handle the other case
fine.
|
|\ \
| | |
| | | |
Documentation fixes for `basics.io.genfromtxt.rst` and `creation.py`
|
| | |
| | |
| | |
| | |
| | | |
Add missing part of usecols negative index explanation and other
minor redaction fixes.
|
|\ \ \
| | | |
| | | | |
ENH: Avoiding NPY_BEGIN_THREADS for small arrays can speed-up trivial_three_operand_loop by 5%
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
ndarraytypes.h
Avoiding NPY_BEGIN_THREADS for small arrays, can speed-up trivial_three_operand_loop by 5%.
As releases of GIL, then quickly restoring just after small operation doesn't benefit.
|
|\ \ \ \
| | | | |
| | | | | |
BUG: Boolean assignment allowed writing to 0-sized array
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
This was because of the assumption that broadcasting works
if the dimension is not > 1, but correct is != 1.
Adepted from a patch provided by prossahl.
Closes gh-3458.
|
|/ / / / |
|
| | | |
| | | |
| | | |
| | | | |
Also add test for IndexError exception when axis is out of bounds.
|
| | | | |
|
| | | | |
|
|\ \ \ \
| |_|/ /
|/| | | |
Fix for the NumPy C-API deprecation mechanism.
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
|\ \ \ \
| | | | |
| | | | | |
Avoid conversion to NumPy Scalar
|
| | | | | |
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
After profiling I noticed that a bottleneck for NumPy scalar operations
occurs when trying to extract the underlying C value from a Python float
because it first converts the Python scalar into its matching NumPy
scalar (e.g. PyFloat -> float64) and then it extracts the C value from
the NumPy scalar.
For some types, it is a lot faster to just extract the value directly
from the Python scalar.
I only did for PyFloat in this modified code but the code is laid out
such that it can be easily extended to other types such as Integers. I
did not do them because I was unsure if there was a special scenario to
handle across OS and/or between 32 and 64 bit platforms. The ratio of
speed to do different operations are listed below (Old time / New time
with modifications). In other words, the bigger the number, the bigger
the speed up we get.
Tested in Python 2.6 Windows
RATIO TEST
1.1 Array * Array
1.1 PyFloat * Array
1.1 Float64 * Array
1.0 PyFloat + Array
1.3 Float64 + Array
1.1 PyFloat * PyFloat
1.0 Float64 * Float64
4.0 PyFloat * Float64
2.9 PyFloat * vector1[1]
3.9 PyFloat + Float64
9.8 PyFloat < Float64
9.9 PyFloat < Float64
1.0 Create array from list
1.0 Assign PyFloat to all
1.0 Assign Float64 to all
4.2 Float64 * pyFloat * pyFloat * pyFloat * pyFloat
1.0 pyFloat * pyFloat * pyFloat * pyFloat * pyFloat
1.0 Float64 * Float64 * Float64 * Float64 * Float64
1.0 Float64 ** 2
1.0 pyFloat ** 2
|
|\ \ \ \ \
| | | | | |
| | | | | | |
Update structured_arrays.py
|
| | | | | |
| | | | | |
| | | | | | |
The behaviour documented did not match the actual behaviour of numpy. Explanation changed and the code example updated.
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
In numpy/core/src/npymath/npy_math_private.h the /* my machine */
comment is not informative.
|
| | | | | | |
|
| | | | | | |
|
|/ / / / /
| | | | |
| | | | |
| | | | |
| | | | | |
The logging message in numpy.distutils.log.set_threshold
mispelled threshold.
|
|\ \ \ \ \
| | | | | |
| | | | | | |
BUG: make preprocessor tests consistent in halffloat.c
|
| | |_|_|/
| |/| | |
| | | | | |
Corrected preprocessor form.
|
| | | | | |
|
|\ \ \ \ \
| |/ / / /
|/| | | | |
Docstring: point to correct equivalent function (one word change)
|
| | | | |
| | | | |
| | | | | |
I overlooked that np.compress and ndarray.compress are different things and wrongly assumed that it was a typo. I corrected that and added np.extract for equivalency for 1-D arrays.
|