Лучший способ вычислить среднее значение массива numpy, исключая невычисляемые элементы - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть числовой массив, в котором я буду вычислять разницу LN между некоторыми числами, а затем я хочу получить ее среднее значение. Проблема в том, что функция LN будет неопределимой с отрицательными входами, и также может произойти деление на ноль. Я хотел бы пропустить эти ненужные элементы, и я даже не хочу включать их в массив. Что я хочу, так это пройти только те уравнения, которые можно вычислить, и взять их среднее значение.

Я пытался сделать это с помощью numpy.nan, который, кажется, является наиболее эффективным способом справиться с этим, просто поместите numpy.nan для каждого значения индекса, которое не может быть вычислено. Проще говоря, я просто инициализирую массив как nan с самого начала, а затем просто заполняю вычисляемые элементы и по умолчанию оставляю все остальное nan.

Как это:

LN_ARRAY    = numpy.full(array_size, numpy.nan, dtype=float, order='C')

...

    for i in range(7,array_size):

       if(F>0.0): LN_ARRAY[i]=abs(  math.log( A / F )  )
       # make sure F can't be zero or negative, A is by default always non zero positive

Теперь проблема в том, что, если я просто возьму среднее значение с numpy.average(LN_ARRAY), оно просто выдаст nan, потому что у меня всегда будут значения nan, так как я иду из 8-го элемента, чтобы заполнить массив, плюс дополнительный nan из-за теста if.

Есть ли способ вычислить среднее значение этого массива, исключив nan или сделать его более эффективным способом?

1 Ответ

1 голос
/ 07 апреля 2019

numpy.nanmean делает это точно.Вы можете указать ось или оставить ее равной None для среднего значения для всего ndarray. Вот ссылка на документы.

...