Как использовать numpy со значением 'None' в Python?

StackOverflow https://stackoverflow.com/questions/962343

  •  12-09-2019
  •  | 
  •  

Вопрос

Я бы хотел вычислить среднее значение массива в Python в этой форме:

Matrice = [1, 2, None]

Я бы просто хотел, чтобы мой None значение, игнорируемое numpy.mean расчет, но я не могу понять, как это сделать.

Это было полезно?

Решение

Вы ищете замаскированные массивы.Вот пример.

import MA
a = MA.array([1, 2, None], mask = [0, 0, 1])
print "average =", MA.average(a)

К сожалению, маскированные массивы не полностью поддерживаются в numpy, поэтому вам нужно осмотреться, чтобы понять, что с ними можно делать, а что нет.

Другие советы

Для этого вы можете использовать scipy:

import scipy.stats.stats as st
m=st.nanmean(vec)

не использовал numpy, но в стандартном python вы можете отфильтровать None используя понимание списка или функцию фильтра

>>> [i for i in [1, 2, None] if i != None]
[1, 2]
>>> filter(lambda x: x != None, [1, 2, None])
[1, 2]

а затем усредните результат, чтобы проигнорировать None

Вы также могли бы использовать такие значения, как NaN или Inf.

In [1]: array([1, 2, None])
Out[1]: array([1, 2, None], dtype=object)

In [2]: array([1, 2, NaN])
Out[2]: array([  1.,   2.,  NaN])

На самом деле, это может быть даже не клудж. В Википедии говорится:

NAN могут использоваться для представления отсутствующих значений в вычислениях.

На самом деле, это не работает для функции mean(), так что неважно.:)

In [20]: mean([1, 2, NaN])
Out[20]: nan

Вы также можете использовать filter, передайте ему None, он будет фильтровать неверные объекты, также 0, :D Итак, используйте его, когда вам тоже не нужно 0.

>>> filter(None,[1, 2, None])
[1, 2]

Вы можете "преобразовать" массив в dtype numpy float64, а затем использовать метод nanmean от numpy, как в следующем примере:

import numpy as np

arr = [1,2,3, None]
arr2 = np.array(arr, dtype=np.float64)
print(arr2) # [ 1.  2.  3. nan]
print(np.nanmean(arr2)) # 2.0

np.среднее значение (Матрица[Матрица != Отсутствует])

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top