Computes the bins used internally by `histogram`. Parameters ========== a : ndarray Ravelled data array bins, range Forwarded arguments from `histogram`. weights : ndarray, optional Ravelled weights array, or None Returns ======= bin_edg
(a, bins, range, weights)
| 358 | |
| 359 | |
| 360 | def _get_bin_edges(a, bins, range, weights): |
| 361 | """ |
| 362 | Computes the bins used internally by `histogram`. |
| 363 | |
| 364 | Parameters |
| 365 | ========== |
| 366 | a : ndarray |
| 367 | Ravelled data array |
| 368 | bins, range |
| 369 | Forwarded arguments from `histogram`. |
| 370 | weights : ndarray, optional |
| 371 | Ravelled weights array, or None |
| 372 | |
| 373 | Returns |
| 374 | ======= |
| 375 | bin_edges : ndarray |
| 376 | Array of bin edges |
| 377 | uniform_bins : (Number, Number, int): |
| 378 | The upper bound, lowerbound, and number of bins, used in the optimized |
| 379 | implementation of `histogram` that works on uniform bins. |
| 380 | """ |
| 381 | # parse the overloaded bins argument |
| 382 | n_equal_bins = None |
| 383 | bin_edges = None |
| 384 | |
| 385 | if isinstance(bins, str): |
| 386 | bin_name = bins |
| 387 | # if `bins` is a string for an automatic method, |
| 388 | # this will replace it with the number of bins calculated |
| 389 | if bin_name not in _hist_bin_selectors: |
| 390 | raise ValueError( |
| 391 | "{!r} is not a valid estimator for `bins`".format(bin_name)) |
| 392 | if weights is not None: |
| 393 | raise TypeError("Automated estimation of the number of " |
| 394 | "bins is not supported for weighted data") |
| 395 | |
| 396 | first_edge, last_edge = _get_outer_edges(a, range) |
| 397 | |
| 398 | # truncate the range if needed |
| 399 | if range is not None: |
| 400 | keep = (a >= first_edge) |
| 401 | keep &= (a <= last_edge) |
| 402 | if not np.logical_and.reduce(keep): |
| 403 | a = a[keep] |
| 404 | |
| 405 | if a.size == 0: |
| 406 | n_equal_bins = 1 |
| 407 | else: |
| 408 | # Do not call selectors on empty arrays |
| 409 | width = _hist_bin_selectors[bin_name](a, (first_edge, last_edge)) |
| 410 | if width: |
| 411 | n_equal_bins = int(np.ceil(_unsigned_subtract(last_edge, first_edge) / width)) |
| 412 | else: |
| 413 | # Width can be zero for some estimators, e.g. FD when |
| 414 | # the IQR of the data is zero. |
| 415 | n_equal_bins = 1 |
| 416 | |
| 417 | elif np.ndim(bins) == 0: |
no test coverage detected