summaryrefslogtreecommitdiff
path: root/numpy/lib/function_base.py
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/lib/function_base.py')
-rw-r--r--numpy/lib/function_base.py47
1 files changed, 28 insertions, 19 deletions
diff --git a/numpy/lib/function_base.py b/numpy/lib/function_base.py
index 96c3f2a35..7c5f0c5af 100644
--- a/numpy/lib/function_base.py
+++ b/numpy/lib/function_base.py
@@ -58,7 +58,7 @@ def iterable(y):
except: return 0
return 1
-def histogram(a, bins=10, range=None, normed=False, weights=None):
+def histogram(a, bins=10, range=None, normed=False, weights=None, density=None):
"""
Compute the histogram of a set of data.
@@ -76,17 +76,27 @@ def histogram(a, bins=10, range=None, normed=False, weights=None):
is simply ``(a.min(), a.max())``. Values outside the range are
ignored.
normed : bool, optional
+ This keyword is deprecated in Numpy 1.6 due to confusing/buggy
+ behavior. It will be removed in Numpy 2.0. Use the density keyword
+ instead.
If False, the result will contain the number of samples
in each bin. If True, the result is the value of the
probability *density* function at the bin, normalized such that
- the *integral* over the range is 1. Note that the sum of the
- histogram values will not be equal to 1 unless bins of unity
- width are chosen; it is not a probability *mass* function.
+ the *integral* over the range is 1. Note that this latter behavior is
+ known to be buggy with unequal bin widths; use `density` instead.
weights : array_like, optional
An array of weights, of the same shape as `a`. Each value in `a`
only contributes its associated weight towards the bin count
(instead of 1). If `normed` is True, the weights are normalized,
so that the integral of the density over the range remains 1
+ density : bool, optional
+ If False, the result will contain the number of samples
+ in each bin. If True, the result is the value of the
+ probability *density* function at the bin, normalized such that
+ the *integral* over the range is 1. Note that the sum of the
+ histogram values will not be equal to 1 unless bins of unity
+ width are chosen; it is not a probability *mass* function.
+ Overrides the `normed` keyword if given.
Returns
-------
@@ -116,13 +126,13 @@ def histogram(a, bins=10, range=None, normed=False, weights=None):
--------
>>> np.histogram([1, 2, 1], bins=[0, 1, 2, 3])
(array([0, 2, 1]), array([0, 1, 2, 3]))
- >>> np.histogram(np.arange(4), bins=np.arange(5), normed=True)
+ >>> np.histogram(np.arange(4), bins=np.arange(5), density=True)
(array([ 0.25, 0.25, 0.25, 0.25]), array([0, 1, 2, 3, 4]))
>>> np.histogram([[1, 2, 1], [1, 0, 1]], bins=[0,1,2,3])
(array([1, 4, 1]), array([0, 1, 2, 3]))
>>> a = np.arange(5)
- >>> hist, bin_edges = np.histogram(a, normed=True)
+ >>> hist, bin_edges = np.histogram(a, density=True)
>>> hist
array([ 0.5, 0. , 0.5, 0. , 0. , 0.5, 0. , 0.5, 0. , 0.5])
>>> hist.sum()
@@ -155,10 +165,8 @@ def histogram(a, bins=10, range=None, normed=False, weights=None):
mn -= 0.5
mx += 0.5
bins = linspace(mn, mx, bins+1, endpoint=True)
- uniform = True
else:
bins = asarray(bins)
- uniform = False
if (np.diff(bins) < 0).any():
raise AttributeError(
'bins must increase monotonically.')
@@ -191,18 +199,19 @@ def histogram(a, bins=10, range=None, normed=False, weights=None):
n = np.diff(n)
- if normed:
- db = array(np.diff(bins), float)
- if not uniform:
- warnings.warn("""
- This release of NumPy (1.6) fixes a normalization bug in histogram
- function occuring with non-uniform bin widths. The returned value
- is now a density: n / (N * bin width), where n is the bin count and
- N the total number of points.
- """)
- return n/db/n.sum(), bins
+ if density is not None:
+ if density:
+ db = array(np.diff(bins), float)
+ return n/db/n.sum(), bins
+ else:
+ return n, bins
else:
- return n, bins
+ # deprecated, buggy behavior. Remove for Numpy 2.0
+ if normed:
+ db = array(np.diff(bins), float)
+ return n/(n*db).sum(), bins
+ else:
+ return n, bins
def histogramdd(sample, bins=10, range=None, normed=False, weights=None):