Манипуляции с массивами и индексация - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь построить кривую, определенную следующим образом:

import numpy as np 
import pandas as pd
import matplotlib.pyplot as plt
limit1 = 50
nPoints1=50
x1 = np.arange(0,limit1,1)
noise = np.asarray(np.random.randn(1,limit1))*15
y1 = x1**1.5 + noise
ts =  pd.DataFrame(y1[0],index=x1)

Я также хочу построить доверительный интервал этой кривой, поэтому я вычисляю:

ts_avg_smooth = ts.rolling(window=50,min_periods=1).mean()
ts_std_smooth = ts.rolling(window=50,min_periods=1).std()

Наконец я делаюграфик

fig1,ax1 = plt.subplots(figsize=(15,8))

ax1.plot(ts_avg_smooth)
ax1.fill_between(ts.index,ts_avg_smooth[0]+ts_std_smooth[0],ts_avg_smooth[0]-ts_std_smooth[0],alpha=0.1)

plt.show()

enter image description here

Я не понимаю, почему мне нужно индексировать свой временной ряд (используйте [0]) в следующих случаях

ts =  pd.DataFrame(y1[0],index=x1)
ts_avg_smooth[0]+ts_std_smooth[0]

Может кто-нибудь объяснить это?

1 Ответ

0 голосов
/ 24 августа 2018

Это потому, что вы создали pandas фрейм данных, когда вы сделали ts_avg_smooth и ts_std_smooth, а ваши значения находятся в столбце 0:

>>> ts_avg_smooth.head()
           0
0  -1.255492
1  -3.943411
2   1.838591
3   8.166289
4  11.074124
>>> ts_std_smooth.head()
           0
0        NaN
1   3.801292
2  10.369164
3  15.226252
4  14.702265

Так что вам нужночтобы выбрать значения в столбце 0, что можно сделать, используя [0] в качестве индексатора

Что касается y1[0], это необходимо, поскольку y1 - это двумерный массив (y1.shape is (1,50)).Поэтому вам нужно выбрать первое измерение, чтобы превратить его в одномерный массив из ваших 50 значений.Или вы можете создать его, используя noise = np.asarray(np.random.randn(limit1))*15, а не np.random.randn(1,limit1), так что он будет одномерным для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...