Усреднение массивов по сетке в Python ⇐ Python
Усреднение массивов по сетке в Python
Я хотел бы усреднить d-мерный массив M размера NxNx...xN (d раз) по регулярной сетке с шагом k< /code>, т.е. построение нового массива N размером NxNx...xN (d раз), где в каждом гиперкубе H регулярной сетки шага k значения массива одинаковы. и равен среднему значению H в исходном массиве.
Более наглядно на примере для d=2, N=4 и k=2:
M=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]] и
N=[[1.5,1.5,3.5,3.5],[1.5,1.5,3.5,3.5],[1.5,1.5,3.5,3.5],[1.5,1.5,3.5,3.5]] Это связано с существующим вопросом: группировка 2D-массива в среднем Тем не менее, это работает только для 2D-массива и не дает массиву той формы, которую я хочу.
Я пытался реализовать это сам в случае d=2, но если сделать то же самое для более высокого измерения, это означало бы повторение циклов for d-раз, что кажется непомерно высоким (я не понимаю, как это сделать иначе) . Я уверен, что есть более компактный и эффективный способ сделать это. Моя попытка d=2 :
def local_average_img(M,k): l=len(M[0]) N = np.zeros((l,l)) для x в диапазоне (l): для y в диапазоне (l): print(np.mean(M[(x//k)*k:(x//k)*k+k, (y//k)*k:(y//k)*k+k])) N[x][y]=np.mean(M[(x//k)*k:(x//k)*k+k, (y//k)*k:(y//k)* к+к]) возврат (Н) M = np.array([[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]) к = 2 результат = local_average_img(M, k) печать (результат)
Я хотел бы усреднить d-мерный массив M размера NxNx...xN (d раз) по регулярной сетке с шагом k< /code>, т.е. построение нового массива N размером NxNx...xN (d раз), где в каждом гиперкубе H регулярной сетки шага k значения массива одинаковы. и равен среднему значению H в исходном массиве.
Более наглядно на примере для d=2, N=4 и k=2:
M=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]] и
N=[[1.5,1.5,3.5,3.5],[1.5,1.5,3.5,3.5],[1.5,1.5,3.5,3.5],[1.5,1.5,3.5,3.5]] Это связано с существующим вопросом: группировка 2D-массива в среднем Тем не менее, это работает только для 2D-массива и не дает массиву той формы, которую я хочу.
Я пытался реализовать это сам в случае d=2, но если сделать то же самое для более высокого измерения, это означало бы повторение циклов for d-раз, что кажется непомерно высоким (я не понимаю, как это сделать иначе) . Я уверен, что есть более компактный и эффективный способ сделать это. Моя попытка d=2 :
def local_average_img(M,k): l=len(M[0]) N = np.zeros((l,l)) для x в диапазоне (l): для y в диапазоне (l): print(np.mean(M[(x//k)*k:(x//k)*k+k, (y//k)*k:(y//k)*k+k])) N[x][y]=np.mean(M[(x//k)*k:(x//k)*k+k, (y//k)*k:(y//k)* к+к]) возврат (Н) M = np.array([[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]) к = 2 результат = local_average_img(M, k) печать (результат)
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Усреднение значений в другом кадре данных до даты в первом кадре данных
Anonymous » » в форуме Python - 0 Ответы
- 126 Просмотры
-
Последнее сообщение Anonymous
-