radis.misc.arrays module


Functions to deal with numpy arrays:


Returns whether a has at least one nan

Fastest implementation for arrays with >10^4 elements https://stackoverflow.com/a/45011547/5622825

arange_len(wmin, wmax, wstep) int[source]

Returns len of a numpy.arange() (wmin, max, wstep) array, accounting for floating point errors

Note: numpy.arange() is useful to maintain the input wstep. If you don’t have this requirement, you better use numpy.linspace() directly.

array_allclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=True)[source]

Returns wheter a and b are all close (element wise). If not the same size, returns False (instead of crashing like the numpy version). Cf numpy.allclose docs for more information.

  • a, b (arrays)

  • rtol (float)

  • atol (float)

  • equal_nan (bool) – whether to consider Nan’s as equal. Contrary to the numpy version this one is set to True by default

autoturn(data, key=-1)[source]

Turns array data. key value:

  • 0 don’t transpose

  • 1 : transpose

  • -1 : auto : make sure the vectors are along the longest dimension

bining(I, ymin=None, ymax=None, axis=1)[source]

Averages a I multi-dimensional array (typically an image) along the y axis bining(I) corresponds to I.mean(axis=1) Nan are not taken into account.

  • I (numpy array) – intensity

  • ymin (int [0-I.shape[1]]) – If None, 0 is used. Default None.

  • ymax (int [0-I.shape[1]]) – If None, I.shape[1] is used. Default None.

  • axis (int) – Default 1

boolean_array_from_ranges(ranges, n)[source]

return a boolean array of length n where (L[i][0], L[i][1]) give the ranges set to True


L = np.array([[2,4], [5,6], [7,8]])
boolean_array_from_coordinates(*L.T, 8)
>>> np.array([0, 0, 1, 1, 0, 1, 0, 1], dtype=bool)
calc_diff(t1, v1, t2, v2)[source]

Substract two vectors that may have slightly offset abscisses interpolating the correct values.

  • t1, v1 (array_like) – first vector and its abscisses

  • t2, v2 (array_like) – second vector and its abscisses


tdiff, vdiff – substracted vector and its abscisses

Return type



Return w[i+1]-w[i-1]/2, same size as w.

Similar to numpy.diff(), but does not change the array size.


Nan are good but only in India.

evenly_distributed(w, atolerance=1e-05)[source]

Make sure array w is evenly distributed.

  • w (numpy array) – array to test

  • atolerance (float) – absolute tolerance


outTrue or False if w is evenly distributed.

Return type


evenly_distributed_fast(w, rtolerance=1e-05)[source]

Make sure array w is evenly distributed, by looking only at the first and last steps. i.e:

w[-1] - w[-2] == w[1] - w[0]
  • w (numpy array) – array to test

  • rtolerance (float) – relative tolerance


outTrue or False if w is evenly distributed.

Return type


find_first(arr, treshold)[source]

Return the index of the first element of the array arr whose value is more than the treshold.

find_nearest(array, searched, return_bool=False)[source]

Return the closest elements in array for each element in ‘searched’ array. In case of multiple elements in array having equal difference with searched element, one with least index is returned. Also returns a boolean array with indices of elements occuring in output list set to true.


from numpy import array
find_nearest(array([1,2,3,4]), array([2.1,2]), True)

>>> (array([2, 2]), array([False, True, False, False]))

find_nearest(np.array([1,2,3,4]), np.array([2.6,2]), True)

>>> (array([3, 2]), array([False,  True,  True, False]))

find_nearest(np.array([1, 3]), np.array([2]))

>>> array([1])

find_nearest(np.array([3, 1]), np.array([2]))

>>> array([3])

Returns index of first non-nan value in a

Returns None is all values are nan


Returns whether a is sorted in ascending order.

From B.M. answer on StackOverflow: https://stackoverflow.com/a/47004533/5622825


Returns whether a is sorted in descending order.

See also



Returns index of first non-nan value in a

Returns None is all values are nan

logspace(xmin, xmax, npoints)[source]

Returns points from xmin to xmax regularly distributed on a logarithm space.

Numpy’s numpy.logspace() does the same from 10**xmin to 10**xmax

nantrapz(I, w, dx=1.0, axis=-1)[source]

Returns trapz() (I, w) discarding nan.


return a list of coordinates corresponding to non-zero values in boolean array b


b (boolean array)


b = np.array([0,0,1,1,0,1,0,1], dtype=bool)
>> ([2, 5, 7],
    [4, 6, 8])
non_zero_values_around(a, n)[source]

return a boolean array of same size as a where each position i is True if there are non-zero points less than n index position away from a[i], and False if all points in a are 0 n index position away from from a[i]

norm(a, normby=None, how='max')[source]

Normalize a numpy array with its maximum. Or normalize it with another vector. Works if array contains nans.


normby (array, or None) – if array, norm with this other array’s maximum. If None, normalize with its maximum.

norm_on(a, w, wmin=None, wmax=None, how='max')[source]

Normalize a on a specific range of w

  • a (array) – array

  • w (array) – x-axis array

Other Parameters
  • wmin, wmax (float) – crop range

  • how (‘mean’, ‘max’) – how to normalize


a_norm – normalized array

Return type


numpy_add_at(LDM, k, l, m, I)[source]

Add the linestrengths on the LDM grid.

Uses the numpy implementation of at(), which add arguments element-wise.

  • LDM (ndarray) – LDM grid

  • k, l, m (array) – index

  • I (array) – intensity to add


add – linestrengths distributed over the LDM grid

Return type



Cython version implemented in https://github.com/radis/radis/pull/234

See also


scale_to(a, b, k=1)[source]

Scale function a to k*b.

sparse_add_at(ki0, Iv0, Iv1, weight, max_range, truncation_pts)[source]

Returns (start, stop) of non-zero ranges, and intensity I (length truncation_pts) for all line intensities Iv0 and Iv1 at position ki0 and ki0+1 with weights weight


ki0 must be sorted.