Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的绘图参数平均值_Python_Numpy_Matplotlib_Pandas_Scipy - Fatal编程技术网

Python中的绘图参数平均值

Python中的绘图参数平均值,python,numpy,matplotlib,pandas,scipy,Python,Numpy,Matplotlib,Pandas,Scipy,我有一个大的真正的1-d数据集,叫做r。我想说: mean(log(1+a*r)) vs a, with a > -1 . 这是我的代码: rr=pd.read_csv('goog.csv') dd=rr['Close'] series=pd.Series(dd) seriespct=series.pct_change() seriespct[0]=seriespct.mean() dum1 =[0]*len(dd) a=1. a_m

我有一个大的真正的1-d数据集,叫做r。我想说:

mean(log(1+a*r)) vs a, with a > -1 . 
这是我的代码:

   rr=pd.read_csv('goog.csv')
   dd=rr['Close']
   series=pd.Series(dd)
   seriespct=series.pct_change()
   seriespct[0]=seriespct.mean()

   dum1 =[0]*len(dd)

   a=1.
   a_max = 1.
   a_step = 0.01

   a = scipy.arange(-3.+a_step, a_max, a_step)
   n = len(a)
   dum2 =[0]*n
   m=len(dd)

   for j in range(n):
      for i in range(m):
         dum1[i]=math.log(1+a[j]*seriespct[i])

   dum2[j]=scipy.mean(dum1)


   plt.plot(a,dum2)
   plt.show()

我如何才能以更为优雅的方式完成这项工作?

您可以使用scipy来完成这项工作

可以使用matplotlib进行打印

import scipy
from matplotlib import pyplot

#convert r from a python list to an 1-D array
r = scipy.array(r)

#edit these
a_max = 100
a_step = 0.1

a = scipy.arange(-1+a_step, a_max, a_step)
n = len(a)

pyplot.plot(a, [scipy.mean(log(1+a[i]*r)) for i in range(n)], 'b-')
pyplot.show()

您可以使用scipy来完成任务

可以使用matplotlib进行打印

import scipy
from matplotlib import pyplot

#convert r from a python list to an 1-D array
r = scipy.array(r)

#edit these
a_max = 100
a_step = 0.1

a = scipy.arange(-1+a_step, a_max, a_step)
n = len(a)

pyplot.plot(a, [scipy.mean(log(1+a[i]*r)) for i in range(n)], 'b-')
pyplot.show()

我建议:

plt.plot(a,np.log(1+r*a[:,无])平均值(1))
这有一个很大的速度优势,因为它避免了for循环,并且在数据集较大的情况下,在numpy中完成的循环要快得多

[49]中的
:a=np.arange(a_步骤-.3,a_最大,a_步骤)
[50]中:r=np.random.random(100)
[51]中:i在(len(a))范围内的timeit[scipy.平均值(log(1+a[i]*r)]]
100圈,最佳3圈:每圈5.47毫秒
在[52]中:timeit np.log(1+r*a[:,无])。平均值(1)
1000个回路,最好为3个:每个回路384µs
它的工作原理是,
a
沿一个轴变化,而
r
沿另一个轴变化,然后你可以沿着
r
变化的轴取平均值,因此你仍然有一个随
a
变化的数组(其形状与
a
相同):

将numpy导入为np
将matplotlib.pyplot作为plt导入
r=np.随机。随机(100)
a=1。
a_max=1。
a_阶跃=0.01
a=np.arange(a_步-0.3,a_最大,a_步)
a、 形状
#(129,)
a=a[:,None]#添加一个新轴,使其成为列向量,与:a=a.reformate(-1,1)相同
a、 形状
#(129, 1)
(a*r).形状
#(129, 100)
loga=np.log(1+a*r)
对数形状
#(129,100)
mloga=对数平均值(轴=1)#取沿第二轴的平均值,其中'a'变化
姆洛加形状
#(129,)
plt.地块(a、mloga)
plt.show()

增编: 为了避免对广播的依赖,您可以使用
np.outer

plt.plot(a,np.log(1+np.outer(a,r)).平均值(1))
无需重塑
a
(跳过步骤
a=a[:,无]

下面是一个简单的示例,您可以看到发生了什么:

r=np.exp(np.arange(1,5))
a=np.arange(5)
In[33]:r
Out[33]:数组([2.71828183,7.3890561,20.08553692,54.59815003])
在[34]中:a
Out[34]:数组([0,1,2,3,4])
在[39]:r*a[:,无]
出[39]:
#这是2.7。。。7.3...        20.08...       54.5...         # 时代:
数组([[0,0,0,0.],#0
[   2.71828183,    7.3890561 ,   20.08553692,   54.59815003],   # 1
[   5.43656366,   14.7781122 ,   40.17107385,  109.19630007],   # 2
[   8.15484549,   22.1671683 ,   60.25661077,  163.7944501 ],   # 3
[  10.87312731,   29.5562244 ,   80.34214769,  218.39260013]])  # 4
In[40]:名词短语外部(a,r)
出[40]:
数组([[0,0,0,0.],
[   2.71828183,    7.3890561 ,   20.08553692,   54.59815003],
[   5.43656366,   14.7781122 ,   40.17107385,  109.19630007],
[   8.15484549,   22.1671683 ,   60.25661077,  163.7944501 ],
[  10.87312731,   29.5562244 ,   80.34214769,  218.39260013]])
#这是每列的平均值:
在[41]中:(np.外部(a,r)).平均值(1)
Out[41]:数组([0,21.19775622,42.39551244,63.59326866,84.79102488])
#上述1+的对数为:
在[42]中:np.log(1+(np.outer(a,r))。平均值(1))
Out[42]:数组([0,3.09999121,3.77035604,4.16811021,4.4519144])

我建议:

plt.plot(a,np.log(1+r*a[:,无])平均值(1))
这有一个很大的速度优势,因为它避免了for循环,并且在数据集较大的情况下,在numpy中完成的循环要快得多

[49]中的
:a=np.arange(a_步骤-.3,a_最大,a_步骤)
[50]中:r=np.random.random(100)
[51]中:i在(len(a))范围内的timeit[scipy.平均值(log(1+a[i]*r)]]
100圈,最佳3圈:每圈5.47毫秒
在[52]中:timeit np.log(1+r*a[:,无])。平均值(1)
1000个回路,最好为3个:每个回路384µs
它的工作原理是,
a
沿一个轴变化,而
r
沿另一个轴变化,然后你可以沿着
r
变化的轴取平均值,因此你仍然有一个随
a
变化的数组(其形状与
a
相同):

将numpy导入为np
将matplotlib.pyplot作为plt导入
r=np.随机。随机(100)
a=1。
a_max=1。
a_阶跃=0.01
a=np.arange(a_步-0.3,a_最大,a_步)
a、 形状
#(129,)
a=a[:,None]#添加一个新轴,使其成为列向量,与:a=a.reformate(-1,1)相同
a、 形状
#(129, 1)
(a*r).形状
#(129, 100)
loga=np.log(1+a*r)
对数形状
#(129,100)
mloga=对数平均值(轴=1)#取沿第二轴的平均值,其中'a'变化
姆洛加形状
#(129,)
plt.地块(a、mloga)
plt.show()

增编: 为了避免对广播的依赖,您可以使用
np.outer

plt.plot(a,np.log(1+np.outer(a,r)).平均值(1))
无需重塑
a
(跳过步骤
a=a[:,无]

下面是一个简单的示例,您可以看到发生了什么:

r=np.exp(np.arange(1,5))
a=np.arange(5)
In[33]:r
Out[33]:数组([2.71828183,7.3890561,20.08553692,54.59815003])
在[34]中:a
Out[34]:数组([0,1,2,3,4])
在[39]:r*a[:,无]
出[39]:
#这是2.7。。。7.3...        20.08...       54.5...         # 时代:
数组([[0,0,0,0.],#0
[   2.71828183,    7.3890561 ,   20.08553692,   54.59815003],   # 1
[   5.43656366,   14.7781122 ,   40.17107385,  109.19630007],   # 2
[   8.15484549,   22.1671683 ,   60.25661077,  163.7944501 ],   # 3
[  10.87312731,   29.5562244 ,   80.34214769,  218.39260013]])  # 4
In[40]:名词短语外部(a,r)
出[40]:
数组([[0,0,0,0.],
[   2.71828183,    7.3890561 ,   20.08553692,   54.59815003],
[   5.43656366,   14.7781122 ,   40.17107385,  109.19630007],
[   8.15484549,   22.1671683 ,   60.25661077,  163.7944501 ],
[  10.87312731,   29.5562244 ,   80.34214769,  218.39260013]])
#这是eac的平均值