Возьмите массив чисел с плавающей запятой и отклоните значения индекса, которые являются выбросами? [Python3]
Недавно я проделал некоторую работу с массивом m-by-n, который мне нужен. У меня есть базовая структура для части кода, но она медленная и глючная. Я должен предпринять следующие шаги:
- Учитывая массив с определенными значениями, любые, которые являются точно 0 (с допуском с плавающей запятой), сразу отклоняются. (это параметр selectedValues)
- Постройте гистограмму оставшихся данных и подгоните к соответствующей кривой (я подгонял к гауссову, но это действительно не проблема)
- Используйте критерий отклонения, чтобы удалить выбросы и распечатать индексы в исходном массиве, которые были удалены на этом этапе (это часть, с которой у меня возникли проблемы)
Интересно, если это не очень сложно, и я слишком усложняю это (мой 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 (потому что я считаю, что там что-то идет не так). Ниже обещанное изображение:
Спасибо всем, кто может предложить понимание:)