Возьмите массив чисел с плавающей запятой и отклоните значения индекса, которые являются выбросами? [Python3]

Недавно я проделал некоторую работу с массивом m-by-n, который мне нужен. У меня есть базовая структура для части кода, но она медленная и глючная. Я должен предпринять следующие шаги:

  1. Учитывая массив с определенными значениями, любые, которые являются точно 0 (с допуском с плавающей запятой), сразу отклоняются. (это параметр selectedValues)
  2. Постройте гистограмму оставшихся данных и подгоните к соответствующей кривой (я подгонял к гауссову, но это действительно не проблема)
  3. Используйте критерий отклонения, чтобы удалить выбросы и распечатать индексы в исходном массиве, которые были удалены на этом этапе (это часть, с которой у меня возникли проблемы)

Интересно, если это не очень сложно, и я слишком усложняю это (мой Python тоже не очень хорош). Я включил мой код в качестве примера вместе с основной блок-схемой желаемых событий.

def handleData(archive):

# Get the data cube
data = archive.getData()

nSub = archive.getNsubint() #TIME
nChan = archive.getNchan() #FREQUENCY
nBin = archive.getNbin() #BINS

# Set a throw away value that the histogram won't read
badDataValue = 0

# Calculates the RMS data matrix
rmsData = createRmsMatrix(data, nSub, nChan, nBin, False, badDataValue)

# Creates a table of only good data RMS
selectedValues = (rmsData != badDataValue)

print(rmsData[selectedValues])

# Best fit of data
mu, sigma = norm.fit(rmsData[selectedValues])

# Creates the histogram
n, bins, patches = histogram(rmsData, selectedValues, mu, sigma, nChan, 'r--', 'Root Mean Squared', 'Instances')

# Set a criterion to reject data
#rejectionCriterion = (abs(rmsData - mu) > 3*sigma)
rejectionCriterion = outliersModifiedZScore(rmsData[selectedValues]) == True
#print(rejectionCriterion)

# Set the weights of potential noise to 0
for time, frequency in zip(np.where(rejectionCriterion)[0], np.where(rejectionCriterion)[1]):
    archive.setWeights(0, t=time, f=frequency)

У меня также возникают проблемы с запуском последнего цикла for. Функция гистограммы просто приводит к правильной гистограмме пиплота с осями, о которых позаботятся, и при необходимости можно будет опубликовать outliersModifiedZScore (потому что я считаю, что там что-то идет не так). Ниже обещанное изображение:

Краткое описание проблемы

Спасибо всем, кто может предложить понимание:)

0 ответов

Другие вопросы по тегам