Python中的绘图参数平均值
我有一个大的真正的1-d数据集,叫做r。我想说: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
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的平均值