CDA就业班http://cda.pinggu.org/jy.html
EViews命令和编程
矩阵运算与循环操作
用户也可以不使用Eviews中内置的命令和函数,而采用矩阵的元素操作和循环来实现对整个矩阵的操作。例如,两个向量的内积,可以通过向量中一个元素单元接一个元素的计算来实现。
scalar inprod1 = 0
for !i = 1 to @rows(vec1)
inprod1 = inprod1 + vec1(!i)*vec2(!i)
next
但是,这种方法的计算速度要比采用EViews内置矩阵函数要慢很多:
scalar inprod2 = @inner(vec1,vec2)
所以,只要有可能就应当采用内置的矩阵运算而不采用通过循环实现的方法。矩阵运算比起等价的循环运算总是要快很多。
但是,用户并不能绝对不采用循环运算,有时循环源算是完全不可避免的。例如,假定希望从每个矩阵元素中减去该列的平均数。这类运算还可能用来构造回归估计量的固定效应。首先,考察计算速度慢的,即只使用循环和元素运算的方法:
matrix(2000,10) x = @convert(mygrp1)
scalar xsum
for !i = 1 to @columns(x)
xsum = 0
for !j = 1 to @rows(x)
xsum = xsum+x(!j,!i)
next
xsum = xsum/@rows(x)
for !j = 1 to @rows(x)
x(!j,!i) = x(!j,!i)-xsum
next
next
一共有两层循环:第一层为按X矩阵的列循环的i循环,第二层为两个都是按X矩阵的行循环的j循环。第一个j循环计算当前列中各元素的合计,依据列合计求出列平均数后,再开始第二个j循环。第二个j循环从当前列各个元素中减去该列的平均数,进行所谓的中心化。下面考察比较快的方法,它在从当前列各个元素中减去该列的平均数的计算中采用了Eviews内置的矩阵运算:
matrix x = @convert(mygrp1)
vector(@rows(x)) xmean
for !i = 1 to @columns(x)
xmean= @mean(@columnextract(x,!i))
colplace(x,@columnextract(x,!i)-xmean,!i)
next
从矩阵X中依次抽取各个列,计算出列平均数向量,再用抽取的列向量减去列平均数向量的差向量去置换矩阵X中相应的列。这里采用控制变量!I进行了依次按列的循环,但避免了按行对各个元素进行的一次循环。
........
........
........
Eviews计量经济学应用培训


雷达卡


京公网安备 11010802022788号







