Как использовать pandas.rolling (). Mean для входного массива 3D? - PullRequest
0 голосов
/ 26 марта 2019

Для 1D я могу использовать:

a=np.array([1,2,3,4])
b=pandas.Series(a).rolling(window=3,center=True).mean()

Но проблема в том, что если у меня есть массив a, в 3D, то использование этого метода дает ошибку

Exception: Data must be 1-dimensional

Кодкоторый я использовал:

t[:,:,0]=(pd.Series(imgg[:,:,0:4]).rolling(window=[1,1,3],center=True).mean())

Здесь imgg - это трехмерный массив numpy.

Что еще я пробовал:

Я также попробовалстарая функция rolling_mean т.е. pd.rolling_mean(a,4,center=True), но она также не работает, выдает ошибку:

AssertionError: cannot support ndim > 2 for ndarray compat

1 Ответ

1 голос
/ 26 марта 2019

Хорошо, надеюсь, это то, что вам нужно.

Я думаю, что вы можете сначала попытаться разделить массивы, вместо того, чтобы пытаться работать с 3-мерным массивом - поскольку мы знаем, что он работает на 1D.

import pandas as pd

imgg = [(1,2,1),(2,3,3),(4,1,2),(5,3,2),(6,2,1),(2,3,4),(5,6,2)]

>>>imgg
   0  1  2
0  1  2  1
1  2  3  3
2  4  1  2
3  5  3  2
4  6  2  1
5  2  3  4
6  5  6  2

x = []
y = []
d = []

# Split into components
for img in imgg:
    x.append(img[0])
    y.append(img[1])
    d.append(img[2])

# Compute rolling mean
dm = pd.Series(d).rolling(window=3,center=True).mean()

# Stitch them back to form your desired dataframe
data = [k for k in zip(x,y,dm)]
df = pd.DataFrame(data)

>>>df
   0  1         2
0  1  2       NaN
1  2  3  2.000000
2  4  1  2.333333
3  5  3  1.666667
4  6  2  2.333333
5  2  3  2.333333
6  5  6       NaN
...