Операции с ближайшими индексами numpy массив - PullRequest
1 голос
/ 14 марта 2020

Пример моего numpy массива scores и его m числа ближайших соседей;

scores = np.random.normal(-0.2,0.01,1000)
m = np.int(np.sqrt(scores.shape[0])+0.5)

Я хочу сравнить i -ое значение в scores с его m ближайших соседей (по индексу). Сравнение должно быть сделано чем-то похожим на

x[i] = (scores[i]-np.mean(scores[m])) / np.sum(scores[m])

, где np.mean(scores[m]),np.sum[scores[m]] представляет среднее значение и сумму m ближайших соседей scores. Если он может обрабатывать первый и последний m индексы, это бонус. С x в качестве массива numpy я мог бы использовать что-то похожее на

scores[x > threshold]

, чтобы получить все оценки, которые превышают определенный порог. Идея состоит в том, чтобы назвать scores[i] выбросом, если он превышает этот конкретный порог.

1 Ответ

1 голос
/ 14 марта 2020

Вы можете решить эту проблему, используя scipy.ndimage.uniform_filter :

uniform_filter эквивалентно Размытость (1-мерный фильтр в вашем случае).

Вот код:

import numpy as np
import scipy.ndimage

#scores = np.random.normal(-0.2,0.01,1000)
scores = np.array(np.r_[1:30]).astype(float) # Initialize to values 1 to 30 (for testing)
m = np.int(np.sqrt(scores.shape[0])+0.5) # m = 5

mean_scores = scipy.ndimage.uniform_filter(scores, size=m, mode='reflect', cval=0.0)
sum_scores = mean_scores * m

x = (scores - mean_scores / sum_scores)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...