У меня есть массив, который измеряет около 2000 элементов в длину, и я хотел бы определить стандартное отклонение его по центру на каждом пикселе, сдвинув окно с некоторой относительно небольшой шириной над ним , и вычисляя StDev элементов в каждом регионе, получая массив, который является таким же количеством элементов, что и вход. Итак, если ширина была установлена равной 5, StDev, центрированный на нулевом элементе, вычислял бы np.std(arr[0:3])
.Статистика области массива numpy
Более конкретно, скажем, ваш входной массив был
[0.14 0.1 0.12 0.25 0.29 0.17 0.21 0.22 0.16 0.18 0.14]
и вы хотели ширину 7. Для элемента 0, вы бы вычислить stdev([0.14 0.1 0.12 0.25])
, для элемента 2, вы бы вычислить stdev([0.14 0.1 0.12 0.25 0.29])
, и так на.
Похоже, наивное решение состояло в том, чтобы перебрать входной массив и либо расширить входной массив на элементы floor(width/2)
(просто маскируя внешние элементы на первом и последнем нескольких пикселях), либо просто изменить используемую ширину.
Есть ли более быстрый способ сделать это, особенно тот, который не требует многократного выбора подмассивов?
Верно, но вам нужно добавить 'center = True' в аргументы, чтобы иметь то, что хотел OP. И остерегайтесь 'ddof' (степени свободы). +1 очень полезный и забыл об этом. –
Хорошие уловы, спасибо @OliverW. – James
Это аккуратно, но когда я пытаюсь, последние три элемента отображаются как «nan». Это также случается для кого-то еще? – DathosPachy