|
@@ 390-417 (lines=28) @@
|
| 387 |
|
for var in variables: |
| 388 |
|
var = var[below] + ((log_x_array - log_xp[below]) / |
| 389 |
|
(log_xp[above] - log_xp[below])) * (var[above] - |
| 390 |
|
var[below]) |
| 391 |
|
|
| 392 |
|
# set to nan if extrap=set_nan |
| 393 |
|
if extrap == 'set_nan': |
| 394 |
|
var[minv == xp.shape[axis]] = np.nan |
| 395 |
|
var[minv == 0] = np.nan |
| 396 |
|
|
| 397 |
|
# Output to list |
| 398 |
|
ret.append(var) |
| 399 |
|
if len(ret) == 1: |
| 400 |
|
return ret[0] |
| 401 |
|
else: |
| 402 |
|
return ret |
| 403 |
|
|
| 404 |
|
|
| 405 |
|
def broadcast_indices(x, minv, ndim, axis): |
| 406 |
|
"""Calculate index values to properly broadcast index array within data array. |
| 407 |
|
|
| 408 |
|
See usage in log_interp. |
| 409 |
|
""" |
| 410 |
|
ret = [] |
| 411 |
|
for dim in range(ndim): |
| 412 |
|
if dim == axis: |
| 413 |
|
ret.append(minv) |
| 414 |
|
else: |
| 415 |
|
broadcast_slice = [np.newaxis] * ndim |
| 416 |
|
broadcast_slice[dim] = slice(None) |
| 417 |
|
dim_inds = np.arange(x.shape[dim]) |
| 418 |
|
ret.append(dim_inds[broadcast_slice]) |
| 419 |
|
return ret |
| 420 |
|
|
|
@@ 364-387 (lines=24) @@
|
| 361 |
|
|
| 362 |
|
# Calculate value above interpolated value |
| 363 |
|
minv = np.apply_along_axis(np.searchsorted, axis, xp[sorter], x[sort_x]) |
| 364 |
|
minv2 = np.copy(minv) |
| 365 |
|
|
| 366 |
|
# If extrap is none and data is out of bounds, raise value error |
| 367 |
|
if ((np.max(minv) == xp.shape[axis]) or (np.min(minv) == 0)) and extrap == 'none': |
| 368 |
|
raise ValueError('Interpolation point out of data bounds encountered') |
| 369 |
|
|
| 370 |
|
# Warn if interpolated values are outside data bounds, will make these the values |
| 371 |
|
# at end of data range. |
| 372 |
|
if np.max(minv) == xp.shape[axis]: |
| 373 |
|
warnings.warn('Interpolation point out of data bounds encountered') |
| 374 |
|
minv2[minv == xp.shape[axis]] = xp.shape[axis] - 1 |
| 375 |
|
if np.max(minv) == 0: |
| 376 |
|
warnings.warn('Interpolation point out of data bounds encountered') |
| 377 |
|
minv2[minv == 0] = 1 |
| 378 |
|
|
| 379 |
|
# Get indicies for broadcasting arrays |
| 380 |
|
above = broadcast_indices(xp, minv2, ndim, axis) |
| 381 |
|
below = broadcast_indices(xp, minv2 - 1, ndim, axis) |
| 382 |
|
|
| 383 |
|
# Create empty output list |
| 384 |
|
ret = [] |
| 385 |
|
|
| 386 |
|
# Calculate interpolation for each variable |
| 387 |
|
for var in variables: |
| 388 |
|
var = var[below] + ((log_x_array - log_xp[below]) / |
| 389 |
|
(log_xp[above] - log_xp[below])) * (var[above] - |
| 390 |
|
var[below]) |