2017-11-11 58 views
1

我有一個問題,顯示圖中的數據。圖框會出現,但不會顯示圖形。你能幫忙嗎?蟒蛇3空圖

我確信x軸的尺寸和數據是一樣的......我根本找不到爲什麼我沒有得到一個圖形作爲回報。

非常感謝您提前。

import numpy as np 
import matplotlib.pyplot as plt 
from scipy.stats import norm 


n = 1000 
theta = 0.8 

d = np.sqrt(1-theta**2) 

def p(x,y): 
    "Stochastic kernel for the TAR model" 
    return norm().pdf((y-theta*np.abs(x))/d)/d 


Z = norm().rvs(n) 
X = np.empty(n) 

for t in range(n-1): 
    X[t+1] = theta*np.abs(X[t])+d*Z[t+1] 


n = len(X) 
X = X.reshape((n, 1)) 

ys = np.linspace(-3,3,200) 
k = len(ys) 
ys = ys.reshape((1,k)) 

v = p(X,ys) 
kernel = np.mean(v, axis=0)  
h = len(kernel) 
kernel = kernel.reshape((1,h)) 


fig, ax = plt.subplots(figsize=(10,7)) 
ax.plot(ys,kernel, 'b-', lw=2,alpha=0.6, label='look ahead estimate') 
plt.show() 

回答

0

的問題是,通過分別重塑兩個1維陣列yskernel到1X k或1x h陣列你得到2維數組,其中第一維是1. plot功能顯然只會遍歷第一個維度,這就是爲什麼情節不顯示任何內容。 我能想到的兩種簡單的方式來解決這個問題:

  1. 不要重塑變量kernelys

    # ... continuing your code ... 
    ys = np.linspace(-3,3,200) 
    k = len(ys) 
    #ys = ys.reshape((1,k)) 
    
    v = p(X,ys) 
    kernel = np.mean(v, axis=0)  
    h = len(kernel) 
    #kernel = kernel.reshape((1,h)) 
    
    
    fig, ax = plt.subplots(figsize=(10,7)) 
    ax.plot(ys,kernel, 'b-', lw=2,alpha=0.6, label='look ahead estimate') 
    plt.show() 
    
  2. 打電話給你的繪圖功能是這樣的:

    ax.plot(ys[0],kernel[0], 'b-', lw=2, alpha=0.6, label='look ahead estimate') 
    

我希望這可以解決您的問題。

要理解爲什麼你還是要重塑X:

讓我們先了解你的函數p(x,y)在尺寸方面:

def p(x,y): 
    "Stochastic kernel for the TAR model" 
    """If x is not reshaped, you substract two one-dimensional arrays from each other, 
    which have not the same dimensions (dim(x) == 1000, dim(y) == 200 in your case). 
    This throws an error. 
    If you reshape X before passing to this function, the y array is substracted 
    element-wise by each of the values of X, which gives you a matrix with dimension 
    dim(x) x dim(y). 
    """ 
    return norm().pdf((y-theta*np.abs(x))/d)/d 

爲了說明這裏發生的事情逐個維度的:

>>> X = np.array([[1], [2], [3], [4]]) 
>>> Y = np.array([1, 2, 3]) 
>>> Y-X 
array([[ 0, 1, 2], 
     [-1, 0, 1], 
     [-2, -1, 0], 
     [-3, -2, -1]]) 

現在我們來看看返回的矩陣會發生什麼:

kernelnp.mean(v, axis=0),其中v是從p(X,ys)返回的矩陣的計算,作品這樣,即np.mean遍歷所述矩陣v的線和在矩陣計算每一「行向量」的平均值。這給你一個一維數組(尺寸ys),你可以在ys上繪製。

+0

非常感謝你......現在正在工作。我做了你的建議,不是重塑內核和ys。我實際上很難理解爲什麼我仍然需要重塑X才能使其運行。你知道嗎 ? – terman

+0

我想我終於明白了代碼中會發生什麼,並對答案進行了編輯,以便我能夠解釋它(希望)比評論中更容易理解。我希望現在很清楚爲什麼你必須重塑X而不是Y和核心:) – jmartin