numpy.ma.diff#
-
ma.diff(a, /, n=1, axis=-1, prepend=
значение> , append=значение> )[источник]# Вычислить n-ю дискретную разность вдоль заданной оси. Первая разность задаётся как
out[i] = a[i+1] - a[i]вдоль заданной оси, более высокие разности вычисляются с использованиемdiffрекурсивно. Сохраняет входную маску.- Параметры:
- aarray_like
Входной массив
- nint, необязательный
Количество раз, когда значения дифференцируются. Если ноль, входные данные возвращаются как есть.
- осьint, необязательный
Ось, вдоль которой берётся разность, по умолчанию — последняя ось.
- prepend, appendarray_like, необязательный
Значения для добавления в начало или конец a вдоль оси перед выполнением разности. Скалярные значения расширяются до массивов длиной 1 в направлении оси и формы входного массива вдоль всех других осей. В противном случае размерность и форма должны совпадать a кроме оси.
- Возвращает:
- diffMaskedArray
n-е разности. Форма выходных данных такая же, как a кроме как вдоль ось где размерность меньше на n. Тип выходных данных такой же, как тип разницы между любыми двумя элементами a. Это тот же тип, что и a в большинстве случаев. Заметным исключением является
datetime64, что приводит кtimedelta64выходной массив.
Смотрите также
numpy.diffЭквивалентная функция в модуле верхнего уровня NumPy.
Примечания
Тип сохраняется для булевых массивов, поэтому результат будет содержать False когда последовательные элементы одинаковы и True когда они отличаются.
Для массивов беззнаковых целых чисел результаты также будут беззнаковыми. Это не должно вызывать удивления, так как результат согласуется с прямым вычислением разницы:
>>> u8_arr = np.array([1, 0], dtype=np.uint8) >>> np.ma.diff(u8_arr) masked_array(data=[255], mask=False, fill_value=np.uint64(999999), dtype=uint8) >>> u8_arr[1,...] - u8_arr[0,...] np.uint8(255)
Если это нежелательно, то массив следует сначала привести к большему целочисленному типу:
>>> i16_arr = u8_arr.astype(np.int16) >>> np.ma.diff(i16_arr) masked_array(data=[-1], mask=False, fill_value=np.int64(999999), dtype=int16)
Примеры
>>> import numpy as np >>> a = np.array([1, 2, 3, 4, 7, 0, 2, 3]) >>> x = np.ma.masked_where(a < 2, a) >>> np.ma.diff(x) masked_array(data=[--, 1, 1, 3, --, --, 1], mask=[ True, False, False, False, True, True, False], fill_value=999999)
>>> np.ma.diff(x, n=2) masked_array(data=[--, 0, 2, --, --, --], mask=[ True, False, False, True, True, True], fill_value=999999)
>>> a = np.array([[1, 3, 1, 5, 10], [0, 1, 5, 6, 8]]) >>> x = np.ma.masked_equal(a, value=1) >>> np.ma.diff(x) masked_array( data=[[--, --, --, 5], [--, --, 1, 2]], mask=[[ True, True, True, False], [ True, True, False, False]], fill_value=1)
>>> np.ma.diff(x, axis=0) masked_array(data=[[--, --, --, 1, -2]], mask=[[ True, True, True, False, False]], fill_value=1)