61阅读

提高行政效率-对于完善管理机制和提高公务员行政效率

发布时间:2017-10-10 所属栏目:如何提高行政效率

一 : 对于完善管理机制和提高公务员行政效率

摘要:公务员的行政效率直接影响着一个国家政治和经济的发展。经济全球化使得国家的行政机制更具挑战。公务员行政效率的构建理由已经引起政府改革的广泛关注。本文讨论了中国公务员的现实情况,提出了低效率的理由,表明了公务员行政中企业家职能引进和改善公务员健康发展的重要性。本文揭示了增强公务员制度建设和革新管理机制是改善公务员行政效率的一项重要举措。

。www.61k.com。

关键词:行政效率;公务员;成本和效益

一、 简介

众所周知,公务员对一个国家和地区竞争实力和综合实力的增加发挥着重要作用。当今社会,无论是发展中国家还是发达国家都机遇和挑战并存。增强国家实力和创新意识需要一个更加有能力、更加强大、更加多产的政府管理,并且还需要公务员有着高素质和高效的运转能力。

二、 对于低形成效率的分析

(一) 意识的落后

中国是一个几千年封建历史的社会,受封建思想的影响颇深,因循守旧的危害波及广泛。所有的这些都是在行政板块带来“官僚主义”、“衙门作风”、“体力劳动”和“自我中心主义”的负面影响。在社会主义系统建立以后,行政方面一直努力消除这些弊端,并且也取得了很大成效。但是清除旧思想影响仍旧是一项长远又复杂的过程。尽管人们的思想在转变,但也会重复,特别是在政府系统转变的过程中,当旧系统的弊端消失时往往正是新系统的弊端产生时。两种系统相互整合,因而,历史带来的弊端是人们增强行政管理、改善行政效率的壁垒。

(二) 规定的缺乏

全国人民代表大会在2005年4月通过“中华人民共和国公务员法”,并在2006年1月1日开始实施。与原来的“公务员管理暂行条例”相比,“公务员法”在法律层面作了升级,但这仍然是个框架,缺乏明确的操作途径和运转方式,并且在一定程度上影响着管理活动的指引,例如,职位分类系统难以表现出来。不单单是职位分类系统,评价体系和培训体系也不规范化,都需要改善。

(三) 行政体制的不合适

首先,刺激机制不能满足市场经济的需求,例如,培训公务员的渠道,没有连续的教育机制让公务员来投入工作。第二,公务员没有合适的出口通道来吸收高素质的人才。事实上,辞职和解雇工作很难实施下去。只要他们没有严重错误,永远不可能以“不称职”来定义他们。出口不畅通,低素质、高年龄的不能离开,高层次的人才不能进入。这种现象对体制重组和全面提升素质相当不利。

(四) 整合机制的缺乏

首先是雇佣机制中有效监管的缺乏,干部管理的集权,一方面减少了检查和通过的联系,增加了挑选雇员的自治权,另一方面,因为管理机制不完善,没有严格的法律机制,通常缺乏有效的制约和监督。受不公平方式的影响,在公务员招聘和部署中存在着盲点和武断。只要人民有一定官方地位,就能被收纳。第二是有效监督机制的缺乏,根据法律提升公务员的行政层次是不科学的。在公务员腐败和不合理实践的预防和惩罚工作中,没有足够的措施来增强公务员的整合和正直。在这一方面,系统是不严格的,预防机制也不完善,系统中存在着行政强制和漏洞。政府不透明影响着行政监督的效率。几乎没有政策制定者和执行者了解政策,公众也全然不知。因此,事实上不存在真正的监督。第三是信息管理中有效反馈机制的缺乏。将公务员的管理和监督最优化是不利的。外国关于公务员系统的经验证明了好的行政管理体制必须有一项有效的信息反馈机制。通过管理进程的信息反馈,持续纠正行政行为,避开错误和危机,最终获得期望目标,实现目标的最优化。

三、 改善行政效率的动力

首先,愈发激烈的国际竞争给公务员带来的新的挑战:世界格局多极化,全球经济使政治力量分割或聚集,全球经济相互依赖,这些都使竞争更加激烈,危机重重。这些理由带来行政困难的增加,都需要政府增加协调性,增强行政责任。因此,也就是说,增加公务员的高效运作能力对面对世界、开拓视野、理性运用规则乃至于趋利避害、确保经济社会的发展平稳快速都很重要。第二,持续变化的经济社会坏境使得公务员体制面对新的挑战。当社会经济和利益体表现出多层性,公务员管理中对公平公正的要求也越重要。除此之外,还有政府功能的转变和政府格局调整。此时,政府机构中的公务员怎样适应变化的体制,怎样增加行政效率,这些理由面对着新的挑战。最后,公众已经推出对公务员管理和服务新的需求,怎样更好的满足人民新的的渴望需求也是一个新的课题,也就是公务员怎样高效运转。将政府和人民的关系连接紧密、建立一个民主的政府形象事关重大。

参考文献

[1]邱佩思。公务员公共服务能力[M]。中国社会科学出版社。111-114,2004年

[2]彭和平。公共行政管理[M]。中国人民大学出版社。137-146,1995年

[3]邱福田,沈邦越。行政管理的科学[M]。南京大学出版社。156-160,2003年

[4]丁凤,田凯。公务员行政效率影响的分析[J]。商丘学院期刊。34-35,1996年

[5]高新伟。行政效率系统的革新[J]。贵州省委员会期刊。17-19,2004年

二 : 应用鲶鱼效应提高政府行政效率

应用鲶鱼效应提高政府行政效率

反腐倡廉、提高政府行政效率其实有1个很简单的方法,关键是是否真抓实干,而不是走形式。下面就有关问题进行简单阐述。

行政效率低下的主要表现是:
1、政府组织臃肿,职能交叉,机构重叠,人浮于事;
2、政府所提供的服务内容数量少、质量低、服务差、周转慢;
3、行政办事程序极为繁琐,手续过于复杂;
4、各部门职[www.61k.com]责不清、分工不明,有利时大家都来抓,无利时相互推诿,扯皮现象不断;
5、投入巨大、产出很少,时间成本耗费多、公共资源浪费大,管理成本居高不下;
6、贪污腐败已经不是个别现象,公众满意度越来越低。


政府行政效率低下的原因:
1、行政主体行为已经逾越了政府和社会所期望的道德规范,包括行政组织的道德失范和公务员个人道德失范。组织道德失范导致行政组织结构的非理性官僚主义、腐败现象的大量存在,职能部门不清,权限不明,机构重叠庞大,条块分割,人员臃肿、推诿塞责、贪污受贿充斥着国家行政管理活动中;个人道德失范导致目前存在的官本位意识、等级观念、集权意识等,严重影响着行政管理活动的顺利开展和效率的提高。
2、政府职能配置不科学,行政组织不规范,直接导致行政职能内外关系的紊乱,政企不分、政事不分、政社不分。该管的未管好,不该管的却越俎代疱,影响了社会基本单位的积极性,压制了社会活力;
3、行政法规不健全、制度不完善,缺乏高效的制度,即能够有效地组织配置各种政治、思想、经济要素以实现行政效率增长的制度资源,在行政制度上缺乏系统性和针对性。具体表现在:条与块各自制定的行政法规、规章之间时常发生相互冲突,从而影响到行政效率;同级行政部门制定的法规、规章之间相互矛盾,从而影响行政效率;由于缺乏统一和协调,在实际工作中部门行政法规之间的“碰撞”现象时有发生。
4、行政人员素质不高、用人机制不健全。这里包括:个别领导思想保守,能力有待提高;行政人员素质不高、用人机制不健全;行政管理考核和竞争、激励机制发生扭曲,难以实现人尽其才、物尽其用,极大地影响了行政效率的提高。
5、行政效率低下与行政监督不得力和行政透明度不高有很大的关系。
6、行政运行机制不畅,管理方法简单,技术落后。

提高行政效率的途径
1、加强思想教育,树立为人民服务的思想观念,增强现代效率和责任观念。
2、优化组织结构设置,建立1个明确、合理、简洁、高效的政府机构。按照社会主义市场经济体制的要求,大力推进机构改革,明确定位、合理设置、精简机构和人员。使行政权力得以准确、高效地运行。
3、完善行政管理体制。不断调适行政职能,调整行政权力关系,调整行政组织结构,建立健全行政管理法规和制度,改革和完善行政决策机制,实现行政决策的科学化。尽可能做到所有的行政行为都有法律依据,发挥科学管理制度的作用。
4、建立一支高素质专业化公务员队伍,提高领导者的素质和领导艺术,按照社会主义市场经济的内在要求去识别人才、选拔人才、任用人才。
5、为了提高行政管理的整体效能和社会效率,必须提高行政透明度,完善行政监督。
6、完善行政队伍激励机制。
7、运用现代管理方法和手段提高行政效率。

以上内容已经有众多专家学者提出,不是本文的重点。
本文的重点是:如何应用鲶鱼效应来提高政府行政效率。
1、何为鲶鱼效应:挪威人喜欢吃沙丁鱼,尤其是活鱼。市场上活鱼的价格要比死鱼高许多。所以渔民总是千方百计地想办法让沙丁鱼活着回到渔港。可是虽然经过种种努力,绝大部分沙丁鱼还是在中途因窒息而死亡。但却有一条渔船总能让大部分沙丁鱼活着回到渔港。船长严格保守着秘密。直到船长去世,谜底才揭开。原来是船长在装满沙丁鱼的鱼槽里放进了一条以鱼为主要食物的鲶鱼。鲶鱼进入鱼槽后,由于环境陌生,便四处游动。沙丁鱼见了鲶鱼十分紧张,左冲右突,四处躲避,加速游动。这样沙丁鱼缺氧的问题就迎刃而解了,沙丁鱼也就不会死了。这样一来,一条条沙丁鱼欢蹦乱跳地回到了渔港。这就是著名的“鲶鱼效应”。
2、如何应用鲶鱼效应来提高政府行政效率?
鲶鱼效应对于“渔夫”来说,在于激励手段的应用。渔夫采用鲶鱼来作为激励手段,促使沙丁鱼不断游动,以保证沙丁鱼活着,以此来获得最大利益。在行政管理中,要实现管理的目标,提高行政管理的整体效能和社会效率,同样需要引入鲶鱼型人才,以此来达到提高行政透明度,改善行政监督,完善行政队伍激励机制的多重目的。
3、应用鲶鱼效应来提高政府行政效率的原理。
鲶鱼效应对于“鲶鱼”来说,在于自我实现。鲶鱼型人才是行政管理所必需的。鲶鱼型人才是出于获得生存空间的需要出现的,而并非是一开始就有如此的良好动机。对于鲶鱼型人才来说,自我实现始终是最根本的。
鲶鱼效应对于“沙丁鱼”来说,在于缺乏忧患意识。沙丁鱼型公务员的忧患意识太少,一味地想追求稳定,甚至贪污腐败,假公济私。但现实的生存状况是不允许沙丁鱼有片刻的安宁。“沙丁鱼”如果不想窒息而亡,就应该也必须活跃起来,积极寻找新的出路。
“鲶鱼效应”是激发政府工作人员活力的有效措施之一。它表现在两方面,一是政府各部门要不断淘汰不宜的人员,补充新鲜血液,把那些富有朝气、思维敏捷、有能力的生力军补充入有关部门,甚至是领导层中,给那些固步自封、因循守旧的懒惰人员和官僚带来竞争压力,才能唤起“沙丁鱼”们的生存意识和竞争求胜之心。二是要不断地引进新理念、新方法、新技术、新思维,这样才能使政府机构在祖国四化建设中不断增强行政管理的能力。
鲶鱼效应的根本就是1个管理方法的问题,而应用鲶鱼效应的关键就在于如何应用好鲶鱼型人才。如何对鲶鱼型人才或组织进行有效的利用和管理。由于鲶鱼型人才或组织的特殊性,管理者不可能用相同的方式来管理鲶鱼型人才或组织,应该创新新的的管理方式和方法。
4、应用鲶鱼效应来提高政府行政效率的方法。
a、鲶鱼型人才的来源:分为3类:1类是在政府部门精简机构时,由于种种原因,必然会有一些不同级别的人才被精简下来,而这些人或这些人的集合就构成鲶鱼型人才的主要部分部分;第二类是新来者,这1类视需要而定,不属于主要的;第3类是现有的各部门人员主动报名参与进来,其目的是获得更好的职位和更大的发展空间)。


b、在各级政府部门将鲶鱼型人才组织起来,每人的行政级别不变,工作地点不变,工资只给原来的60-80%,并且统一归到上一级(或更上一级)部门进行管理。这部分人员经过一段时间如果没有建树,将被真正精简下来(不包括第二类和第3类人员),不再拥有公务员的身份。
c、鲶鱼型人才的工作内容就是了解所在部门,所在地域有关思想道德建设,行政管理,经济工作,教育文化等诸方面的各种各样的信息,并根据这些信息向有关方面提出建议或向上级部门反映情况。
d、对有所建树的鲶鱼型人才的奖励就是把他提拔到被他发现问题,并且能够提出合理、完整、可行的改革建议的部门相关岗位上,成绩突出者可以提拔到相应的领导岗位。对这些人来说,他们奋斗的目的就是为了晋升,为了得到更好的职位,为了更大的发展空间,这种目的完全是值得肯定和鼓励的。
e、在操作过程中应注意反馈、监督、检查,
并对之做出详细的规定。

注:本方法也可用于社会环境治理,待见另文(应用鲶鱼效应净化社会环境)。

三 : 提高MATLAB运行效率

用过Matlab的人都知道,Matlab是一种解释性语言,存在计算速度慢的问题,为了提高程序的运行效率,matlab提供了多种实用工具及编码技巧。[www.61k.com]

1. 循环矢量化
Matlab是为矢量和矩阵操作而设计的,因此,可以通过矢量化方法加速M文件的运行。矢量化是指将for循环和while循环转换为等价的矢量或矩阵操作。下面给出一个循环的例子:
i=0;
for n = 0:0.1:1000
    i=i+1;
    y(i)=cos(n);
end
那么我们可以矢量化为:
n= 0:0.1:1000;
y=cos(n);
我们可以用tic和toc函数来查看上述各代码运行的时间,采用for循环的程序0.39秒(具体时间和计算机配置有关),而矢量化后几乎耗时为0。

2. 给数组或矩阵预分配内存
    特别是使用大型数组或矩阵时,Matlab进行动态内存分配和取消时,可能会产生内存碎片,这将导致大量闲置内存产生,预分配可通过提前给大型数据结构预约足够空间来避免这个问题。

3. 用函数代替脚本文件
    因为每次调用MATLAB的脚本文件都需要将不必要的中间变量加载到内存中,每执行一次,就加载一次。函数在调用时被编译成了伪代码,只需要加载到内存一次。当多次调用同一个函数时会运行快一些。因此尽量多使用函数文件而少使用脚本文件,也是提高执行效率的一种方法。

4. 用Mex文件编写循环代码
    Matlab提供了与C和C++的接口,那么我们可以在用C或C++语言编写耗时的循环代码,然后通过接口程序在Matlab中转换成dll文件,这就是我们所要的Mex文件,通过这种方法可以极大地提高计算速率。

1.尽量避免使用循环结构
MATLAB变量的基本类型是矩阵,当对矩阵的每个元素循环处理时,运算速度很慢。因此编程时应尽量把数组和矩阵看作一个整体来进行编程,而不是像其他的程序设计语言那样,使用循环结构对矩阵的元素循环进行处理。利用MATLAB提供的用于矢量化操作的函数,把循环矢量化,这样既可以提高编程效率,也可以提高程序的执行效率。下面给出一个循环的例子:
i=0;
for n = 0:0.1:100
          i=i+1;
        y(i)=cos(n)
end
上述程序段把数组中的每个元素都进行函数值计算,这样会耗费大量的运算时间,我们可以把数组看作一个整体来处理,计算函数值,可以修改这个程序段如下。
n = 0:0.1:100;
y = cos(n)
通过使用MATLAB专门提供的测试程序运行时间的函数,可以发现,把数组看作一个整体,进行操作后,执行效率提高约300倍。
另外,在必须使用多重循环的情况下,建议在循环的外环执行循环次数少的,内环执行循环次数多的,这样也可以显著提高程序执行速度。
2.在使用数组或矩阵之前先定义维数
MATLAB中的变量在使用之前不需要明确地定义和指定维数。但当未预定义数组或矩阵的维数时,当需赋值的元素下标超出现有的维数时,MATLAB就为该数组或矩阵扩维一次,这样就会大大降低程序的执行效率。因此,在使用数组或矩阵之前,预定义维数可以提高程序的执行效率
3.对矩阵元素使用下标或者索引操作
MATLAB中,矩阵元素的引用可用两个下标来表示。例如:A(i,j) 表示矩阵的第i行第j列的元素;A(1:k,j)表示矩阵A的第j列的前k个元素;A(:,j) 表示矩阵的第j列的所有元素。求矩阵A的第j列元素的平均值的表达式为mean(A(:,j))。
4.尽量多使用函数文件少使用脚本文件
因为每次调用MATLAB的脚本文件都需要将不必要的中间变量加载到内存中,每执行一次,就加载一次。函数在调用时被编译成了伪代码,只需要加载到内存一次。当多次调用同一个函数时会运行快一些。因此尽量多使用函数文件而少使用脚本文件,也是提高执行效率的一种方法。
5.在必须使用循环时,可以考虑转换为C-MEX
当必须使用耗时的循环时,可以考虑将循环体中的语句转换为C-MEX。C-MEX是将M文件通过MATLAB的编译器转换为可执行文件,是按照 MEX 技术要求的格式编写相应的程序,通过编译连接,生成扩展名为.dll的动态链接库文件,可以在MATLAB环境下直接执行。这样,循环体中的语句在执行时不必每次都解释(interpret)。一般来说,C-MEX 文件的执行速度是相同功能的M文件执行速率的20~40倍。编写C-MEX不同于M文件,需要了解MATLABC-MEX规范。幸运的是MATLAB提供了将M文件转换为C-MEX的工具。
6.内存优化
MATLAB在进行复杂的运算时需要占用大量的内存。合理使用内存和提高内存的使用效率,可以加快运行速度,减少系统资源的占用。
7.内存管理函数和命令
(1)Clear variablename:从内存中删除名称为variablename的变量。
(2)Clear all:从内存中删除所有的变量。
(3)Save:将指令的变量存入磁盘。
(4)Load:将save命令存入的变量载入内存。
(5)Quit:退出MATLAB,并释放所有分配的内存。
(6)Pack:把内存中的变量存入磁盘,再用内存中的连续空间载回这些变量。考虑到执行效率问题,不能在循环中使用。
8.节约内存的方法
(1)避免生成大的中间变量,并删除不再需要的临时变量。
(2)当使用大的矩阵变量时,预先指定维数并分配好内存,避免每次临时扩充维数。
(3)当程序需要生成大量变量数据时,可以考虑定期将变量写到磁盘,然后清除这些变量。

扩展:提高python运行效率 / 提高程序运行效率 / 提高代码运行效率


当需要这些变量时,再重新从磁盘加载。
(4)当矩阵中数据极少时,将全矩阵转换为稀疏矩阵。

提高MATLAB程序效率的几点原则,这些都是俺在这两年中参加四次数模编写大量m程序总结的经验,加之网上很多英雄也是所见略同。
1.“计算向量、矩阵化,尽量减少for循环。”[/B]
因为MATLAB本来就是矩阵实验室的意思,他提供了极其强大而灵活的矩阵运算能力,你就没必要自己再用自己编写的for循环去实现矩阵运算的功能了。另外由于matlab是一种解释性语言,所以最忌讳直接使用循环语句。但在有些情况下,使用for循环可以提高程序的易读性,在效率提高不是很明显的情况下可以选择使用for循环。
口说无凭,下面是利用tic与toc命令计算运算所用时间的方法,测试两种编程的效率。需要说明的是没有办法精确计算程序执行时间,matlab帮助这样写到“Keep in mind that tic and toc measure overall elapsed time. Make sure that no other applications are running in the background on your system that could affect the timing of your MATLAB programs.”意思是说在程序执行的背后很可能有其他程序在执行,这里涉及到程序进程的的问题,m程序执行的过程中很可能有其他进程中断m程序来利用cup,所以计算出来的时间就不仅是m程序的了,在这种情况下我把那些寄点去掉,进行多次计算求他的平均时间。

n = 100;
A(1:1000,1:1000) = 13;
C(1:1000,1) = 15;
D(1:1000,1) = 0;
for k = 1:n
    D(:) = 0;
    tic
    for i = 1:1000
        for j = 1:1000
            D(i) = D(i) + A(i,j)*C(j);
        end
    end
    t1(k) = toc;
    %------------------
    D(:) = 0;
    tic
    D = A*C;
    t2(k) = toc;
end
u = t1./t2;
u(u<0) = [];
plot(u)
p = mean(u)

t1、t2分别代表用for循环编程和矩阵化编程计算矩阵乘向量所用时间,u代表时间的比值。u(u<0) = [];是认为t1不可能小于t2,所以去掉不可能出现的情况。然后画出图形计算平均值。
经多次试验结果大致相同,其中一次结果如下:
p =
    9.6196
------------t1时间是t2的十倍左右。

编著 【转】提高MATLAB运行效率

2.“循环内大数组预先定义--预先分配空间”[/U]
这一点原则是极其重要的,以至于在编写m程序时编辑器会给出提示“'ver' might be growing inside a loop.Consider prealloacting for speed.”

clear
n = 50;
m = 1000;
for k = 1:n
    A = [];
    tic
    A(1:m,1:m) = 3;
    for i = 1:m
        A(i,i) = i;
    end
    t1(k) = toc;
    %------------
    A = [];
    tic
    for j = 1:m
        A(j,j) = j;
    end
    t2(k) = toc;
end
t2(t1>10^9) = [];
t1(t1>10^9) = [];
plot([t1;t2]')
t1、t2分别表示预先分配空间和循环中分配空间的时间,下图上面一条t2、下面t1

编著 【转】提高MATLAB运行效率

3.“尽可能利用matlab内部提供的函数”[/U]
因为matlab内部提供的函数绝对是各种问题的最优算法,那写程序都是他们大师级人物写出来的,程序应该说相当高效,有现成的为什么不用那!    这个原则就不用实际的程序测试了。

关于MATLAB程序提速的问题,可以参考网上很多智者的文章,都比较经典。也可以看看我的上一篇文章,和网上大部分帖子有点不同,我是以实际的测试程序作为依据对如何提高MATLAB程序速度进行介绍的。      这里我再补充几点大家需要注意的。下面是我在国内一个比较出名的论坛看到的关于m程序提速的帖子,开始还真以为他们谈论的都应该遵循。(尽信书不如无书)
帖子的一部分这样说道:“当要预分配一个非double型变量时使用repmat函数以加速,如将以下代码:
A = int8(zeros(100));
换成:
A = repmat(int8(0), 100, 100);”
凡事不能只凭自己的感觉,没有一点实际的例子,对于权威我们还要有挑战精神那,就不用说现在还不是经典的观点了。下面是我写的测试程序,我本来是想得到这位网友大哥的结果,但是实事不是我们想象的那么简单。

n = 100;
m = 1000;
for k=1:n
    tic
    A = int8(ones(m));
    t1(k) = toc;
    tic
    B = repmat(int8(1),m,m);
    t2(k) = toc;
end
plot(1:n,t1,'r',1:n,t2)
isequal(A,B)
可以看出下面的红线是t1,而且最后的一句返回1,说明两种形式返回的值完全一样。

编著 【转】提高MATLAB运行效率

扩展:提高python运行效率 / 提高程序运行效率 / 提高代码运行效率

由此我想说的是,不管是在我们做论文,还是写博客的时候,别直接从网上或者别人文章那儿找点知识定理之类的补充自己那苍白无力的文章。最好是自己动手编一下,“实践是检验真理的唯一标准”。

经过这一测试,我感觉有必要,也有责任对这个论坛上的一大批经典谈论加以测试。尽管这个结论是错误的但这还不足以证明论坛上的帖子都不是经典。
还有一点关于m程序提速的这样说到:“在必须使用多重循环时下,如果两个循环执行的次数不同,则在循环的外环执行循环次数少的,内环执行循环次数多的。这样可以显著提高速度。”

n=1000;
A = ones(1000)*13;
for k=1:n
    tic
    for i=1:10
        for j=1:1000
            A(i,j)=A(i,j)*15;
        end
    end
    t1(k)=toc;
    tic
    for i=1:1000
        for j=1:10
            A(i,j)=A(i,j)*16;
        end
    end
    t2(k)=toc;
end
t2(t1>10^9)=[];
t1(t1>10^9)=[];
t1(t2>10^9)=[];
t2(t2>10^9)=[];%去除外界因素影响所产生的寄点
plot(1:size(t1,2),t1,'r',1:size(t1,2),t2)

编著 【转】提高MATLAB运行效率

由这个时间图可以看出for循环的嵌套顺序对于速度是有影响的,虽然相对来说差别不是很大,但是毕竟论坛上的观点是正确的。至于他所说的“显著”二字就没必要加上了。
此论坛还有一些提速的观点列举如下:
“遵守Performance Acceleration的规则
    关于什么是“Performance Acceleration”请参阅matlab的帮助文件。我只简要的将
其规则总结如下7条:
1、只有使用以下数据类型,matlab才会对其加速:
logical,char,int8,uint8,int16,uint16,int32,uint32,double 而语句中如果使用了非以上的数据类型则不会加速,如:numeric,cell,structure,single,function handle,java classes,user classes,int64,uint64
2、matlab不会对超过三维的数组进行加速。
3、当使用for循环时,只有遵守以下规则才会被加速:a、for循环的范围只用标量值来表示;
b、for循环内部的每一条语句都要满足上面的两条规则,即只使用支持加速的数据类型,只使用三维以下的数组;c、循环内只调用了内建函数(build-in function)。
4、当使用if、elseif、while和switch时,其条件测试语句中只使用了标量值时,将加速运行。
5、不要在一行中写入多条操作,这样会减慢运行速度。即不要有这样的语句:
x =a.name; for k=1:10000, sin(A(k)), end;
6、当某条操作改变了原来变量的数据类型或形状(大小,维数)时将会减慢运行速度。
7、应该这样使用复常量x = 7 + 2i,而不应该这样使用:x = 7 + 2*i,后者会降低运行速度。”
“尽量用向量化的运算来代替循环操作。如将下面的程序:
i=0;
for t = 0:.01:10
    i = i+1;
    y(i) = sin(t);
end
替换为:
t = 0:.01:10;
y = sin(t);
速度将会大大加快。最常用的使用vectorizing技术的函数有:All、diff、ipermute、permute、reshape、ueeze、y、find、logical、prod、shiftdim、sub2ind、cumsum、ind2sub、ndgrid、repmat、sort、sum 等。”
“优先使用matlab内建函数,将耗时的循环编写进MEX-File中以获得加速。
b、使用Functions而不是Scripts 。”
“ 绝招:你也许觉得下面两条是屁话,但有时候它真的是解决问题的最好方法。
1、改用更有效的算法
2、采用Mex技术,或者利用matlab提供的工具将程序转化为C语言、Fortran语言。关于如何将M文件转化为C语言程序运行,可以参阅本版帖子:“总结:m文件转化为c/c++语言文件,VC编译”。 ”

除了m程序提速的问题,这里还列出了《MATLAB代码矢量化指南(译)》
一、基本技术
-----------------------------------------------------
1)MATLAB索引或引用(MATLAB Indexing or Referencing)
在MATLAB中有三种基本方法可以选取一个矩阵的子阵。它们分别是 下标法,线性法和逻辑法(subscripted,linear, and logical)。
如果你已经熟悉这个内容,请跳过本节

1.1)下标法
非常简单,看几个例子就好。
A = 6:12;
A([3,5])
ans =
8 10
A([3:2:end])
ans =
8 10 12

A =
[11 14 17;
12 15 18;
13 16 19];
A(2:3,2)
ans =
15
16

1.2)线性法
二维矩阵以列优先顺序可以线性展开,可以通过现行展开后的元素序号
来访问元素。
A =
[11 14 17;
12 15 18;
13 16 19];
A(6)
ans =
16

A([3,1,8])
ans =
13 11 18
A([3;1;8])
ans =
13
11
18

1.3)逻辑法
用一个和原矩阵具有相同尺寸的0-1矩阵,可以索引元素。在某个位置上为1表示选取元素,否则不选。得到的结果是一个向量。
A = 6:10;
A(logical([0 0 1 0 1]))
ans =
8 10
A =
[1 2
3 4];
B = [1 0 0 1];
A(logical(B))
ans =
1 4
-----------------------------------------------------

扩展:提高python运行效率 / 提高程序运行效率 / 提高代码运行效率


2)数组操作和矩阵操作(Array Operations vs. Matrix Operations)
对矩阵的元素一个一个孤立进行的操作称作数组操作;而把矩阵视为一个整体进行的运算则成为矩阵操作。MATLAB运算符*,/,\,^都是矩阵运算,而相应的数组操作则是.*, ./, .\, .^
A=[1 0 ;0 1];
B=[0 1 ;1 0];
A*B % 矩阵乘法
ans =
0 1
1 0
A.*B % A和B对应项相乘
ans =
0 0
0 0
------------------------------------------------------
3)布朗数组操作(Boolean Array Operations)
对矩阵的比较运算是数组操作,也就是说,是对每个元素孤立进行的。因此其结果就不是一个“真”或者“假”,而是一堆“真假”。这个结果就是布朗数组。
D = [-0.2 1.0 1.5 3.0 -1.0 4.2 3.14];
D >= 0
ans =
0 1 1 1 0 1 1
如果想选出D中的正元素:
D = D(D>0)
D =
1.0000 1.5000 3.0000 4.2000 3.1400
除此之外,MATLAB运算中会出现NaN,Inf,-Inf。对它们的比较参见下例
Inf==Inf返回真
Inf<1返回假
NaN==NaN返回假
同时,可以用isinf,isnan判断,用法可以顾名思义。在比较两个矩阵大小时,矩阵必须具有相同的尺寸,否则会报错。这是 你用的上size和isequal,isequalwithequalnans(R13及以后)。
------------------------------------------------------
4)从向量构建矩阵(Constructing Matrices from Vectors)
在MATLAB中创建常数矩阵非常简单,大家经常使用的是:
A = ones(5,5)*10
但你是否知道,这个乘法是不必要的?
A = 10;
A = A(ones(5,5))
A =
10 10 10 10 10
10 10 10 10 10
10 10 10 10 10
10 10 10 10 10
10 10 10 10 10
类似的例子还有:
v = (1:5)';
n = 3;
M = v(:,ones(n,1))
M =

1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
事实上,上述过程还有一种更加容易理解的实现方法:
A = repmat(10,[5 5]);
M = repmat([1:5]', [1,3]);
其中repmat的含义是把一个矩阵重复平铺,生成较大矩阵。更多详细情况,参见函数repmat和meshgrid。
-----------------------------------------------------
5)相关函数列表(Utility Functions)
ones 全1矩阵
zeros 全0矩阵
reshape 修改矩阵形状
repmat 矩阵平铺
meshgrid 3维plot需要用到的X-Y网格矩阵
ndgrid n维plot需要用到的X-Y-Z...网格矩阵
filter 一维数字滤波器,当数组元素前后相关时特别有用。
cumsum 数组元素的逐步累计
cumprod 数组元素的逐步累计
eye 单位矩阵
diag 生成对角矩阵或者求矩阵对角线
spdiags 稀疏对角矩阵
gallery 不同类型矩阵库
pascal Pascal 矩阵
hankel Hankel 矩阵
toeplitz Toeplitz 矩阵

==========================================================
二、扩充的例子
------------------------------------------------------
6)作用于两个向量的矩阵函数
假设我们要计算两个变量的函数F
F(x,y) = x*exp(-x^2 - y^2)
我们有一系列x值,保存在x向量中,同时我们还有一系列y值。我们要对向量x上的每个点和向量y上的每个点计算F值。换句话说,我们要计算对于给定向量x和y的所确定的网格上的F值。
使用meshgrid,我们可以复制x和y来建立合适的输入向量。然后
可以使用第2节中的方法来计算这个函数。
x = (-2:.2:2);
y = (-1.5:.2:1.5)';
[X,Y] = meshgrid(x, y);
F = X .* exp(-X.^2 - Y.^2);
如果函数F具有某些性质,你甚至可以不用meshgrid,比如
F(x,y) = x*y ,则可以直接用向量外积
x = (-2:2);
y = (-1.5:.5:1.5);
x'*y
在用两个向量建立矩阵时,在有些情况下,稀疏矩阵可以更加有
效地利用存储空间,并实现有效的算法。我们将在第8节中以一个
实例来进行更详细地讨论.
--------------------------------------------------------
7)排序、设置和计数(Ordering, Setting, and Counting Operations)
在迄今为止讨论过的例子中,对向量中一个元素的计算都是独立于同一向量的其他元素的。但是,在许多应用中,你要做的计算则可能与其它元素密切相关。例如,假设你用一个向量x来表示一 个集合。不观察向量的其他元素,你并不知道某个元素是不是一个冗余元素,并应该被去掉。如何在不使用循环语句的情况下删除冗余元素,至少在现在,并不是一个明显可以解决的问题。
解决这类问题需要相当的智巧。以下介绍一些可用的基本工具

max 最大元素
min 最小元素
sort 递增排序
unique 寻找集合中互异元素(去掉相同元素)
diff 差分运算符[X(2) - X(1), X(3) - X(2), ... X(n) - X(n-1)]
find 查找非零、非NaN元素的索引值
union 集合并
intersect 集合交
setdiff 集合差
setxor 集合异或

继续我们的实例,消除向量中的多余元素。注意:一旦向量排序后,任何多余的元素就是相邻的了。同时,在任何相等的相邻元素在向量diff运算时变为零。这是我们能够应用以下策略达到目的。我们现在在已排序向量中,选取那些差分非零的元素。

% 初次尝试。不太正确!
x = sort(x(:));
difference = diff(x);
y = x(difference~=0);

这离正确结果很近了,但是我们忘了diff函数返回向量的元素个数比输入向量少1。在我们的初次尝试中,没有考虑到最后一个元素也可能是相异的。为了解决这个问题,我们可以在进行差分之前给向量x加入一个元素,并且使得它与以前的元素一定不同。一种实现的方法是增加一个NaN。

% 最终的版本。
x = sort(x(:));
difference = diff([x;NaN]);
y = x(difference~=0);

我们使用(:)运算来保证x是一个向量。我们使用~=0运算,而不用find函数,因为find函数不返回NaN元素的索引值,而我们操作中差分的最后元素一定是NaN。这一实例还有另一种实现方式:

扩展:提高python运行效率 / 提高程序运行效率 / 提高代码运行效率

y=unique(x);

后者当然很简单,但是前者作为一个练习并非无用,它是为了练习使用矢量化技术,并示范如何编写你自己的高效代码。此外,前者还有一个作用:Unique函数提供了一些超出我们要求的额外功能,这可能降低代码的执行速度。
      假设我们不只是要返回集合x,而且要知道在原始的矩阵里每个相异元素出现了多少个“复本”。一旦我们对x排序并进行了差分,我们可以用find来确定差分变化的位置。再将这个变化位置进行差分,就可以得到复本的数目。这就是"diff of find of diff"的技巧。基于以上的讨论,我们有:

% Find the redundancy in a vector x
x = sort(x(:));
difference = diff([x;max(x)+1]);
count = diff(find([1;difference]));
y = x(find(difference));
plot(y,count)

这个图画出了x中每个相异元素出现的复本数。注意,在这里我们避开了NaN,因为find不返回NaN元素的索引值。但是,作为特例,NaN和Inf 的复本数可以容易地计算出来:

count_nans = sum(isnan(x(:)));
count_infs = sum(isinf(x(:)));

另一个用于求和或者计数运算的矢量化技巧是用类似建立稀疏矩阵的方法实现的。这还将在第9节中作更加详细的讨论.
-------------------------------------------------------
8)稀疏矩阵结构(Sparse Matrix Structures)

在某些情况下,你可以使用稀疏矩阵来增加计算的效率。如果你构造一个大的中间矩阵,通常矢量化更加容易。在某些情况下,你可以充分利用稀疏矩阵结构来矢量化代码,而对于这个中间矩阵不需要大的存储空间。
假设在上一个例子中,你事先知道集合y的域是整数的子集,
{k+1,k+2,...k+n};即,
y = (1:n) + k

例如,这样的数据可能代表一个调色板的索引值。然后,你就可以对集合中每个元素的出现进行计数(构建色彩直方图?译者)。这是对上一节中"diff of find of diff"技巧的一种变形。现在让我们来构造一个大的m x n矩阵A,这里m是原始x向量中的元素数, n是集合y中的元素数。
A(i,j) = 1 if x(i) = y(j)
0 otherwise

回想一下第3节和第4节,你可能认为我们需要从x和y来构造矩阵A。如果当然可以,但要消耗许多存储空间。我们可以做得更好,因为我们知道,矩阵A中的多数元素为0,x中的每个元素对应的行上只有一个值为1。
以下就是构造矩阵的方法(注意到y(j) = k+j,根据以上的公式):
x = sort(x(:));
A = sparse(1:length(x), x+k, 1, length(x), n);

现在我们对A的列进行求和,得到出现次数。
count = sum(A);
在这种情况下,我们不必明确地形成排序向量y,因为我们事先知道
y = 1:n + k.

这里的关键是使用数据,(也就是说,用x控制矩阵A的结构)。由于x在一个已知范围内取整数值,我们可以更加有效地构造矩阵。 假设你要给一个很大矩阵的每一列乘以相同的向量。使用稀疏矩阵,不仅可以节省空间,并且要比在第5节介绍的方法更加快速. 下面是它的工作方式:
F = rand(1024,1024);
x = rand(1024,1);
% 对F的所有行进行点型乘法.
Y = F * diag(sparse(x));
% 对F的所有列进行点型乘法.
Y = diag(sparse(x)) * F;

我们充分利用矩阵乘法算符来执行大规模运算,并使用稀疏矩阵以防止临时变量变得太大。
--------------------------------------------------------
9)附加的例子(Additional Examples)
下面的例子使用一些在本技术手册中讨论过的方法,以及其它一些相关方法。请尝试使用tic 和toc(或t=cputime和cputime-t),看一下速度加快的效果。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
用于计算数组的双重for循环。
使用的工具:数组乘法
优化前:
A = magic(100);
B = pascal(100);
for j = 1:100
  for k = 1:100;
      X(j,k) = sqrt(A(j,k)) * (B(j,k) - 1);
  end
end
优化后:
A = magic(100);
B = pascal(100);
X = sqrt(A).*(B-1);
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
用一个循环建立一个向量,其元素依赖于前一个元素使用的工具:FILTER, CUMSUM, CUMPROD
优化前:
A = 1;
L = 1000;
for i = 1:L
  A(i+1) = 2*A(i)+1;
end
优化后:
L = 1000;
A = filter([1],[1 -2],ones(1,L+1));
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
如果你的向量构造只使用加法或乘法,你可使用cumsum或cumprod函数。
优化前:
n=10000;
V_B=100*ones(1,n);
V_B2=100*ones(1,n);
ScaleFactor=rand(1,n-1);
for i = 2:n
    V_B(i) = V_B(i-1)*(1+ScaleFactor(i-1));
end
for i=2:n
    V_B2(i) = V_B2(i-1)+3;
end
优化后:
n=10000;
V_A=100*ones(1,n);
V_A2 = 100*ones(1,n);
ScaleFactor=rand(1,n-1);
V_A=cumprod([100 1+ScaleFactor]);
V_A2=cumsum([100 3*ones(1,n-1)]);
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

扩展:提高python运行效率 / 提高程序运行效率 / 提高代码运行效率


向量累加,每5个元素进行一次:
工具:CUMSUM , 向量索引
优化前:
% Use an arbitrary vector, x
x = 1:10000;
y = [];
for n = 5:5:length(x)
    y = [y sum(x(1:n))];
end
优化后(使用预分配):
x = 1:10000;
ylength = (length(x) - mod(length(x),5))/5;
% Avoid using ZEROS command during preallocation
y(1:ylength) = 0;
for n = 5:5:length(x)
    y(n/5) = sum(x(1:n));
end
优化后(使用矢量化,不再需要预分配):
x = 1:10000;
cums = cumsum(x);
y = cums(5:5:length(x));
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
操作一个向量,当某个元素的后继元素为0时,重复这个元素:
工具:FIND, CUMSUM, DIFF
任务:我们要操作一个由非零数值和零组成的向量,要求把零替换成为它前面的非零数值。例如,我们要转换下面的向量:
a=2; b=3; c=5; d=15; e=11;
x = [a 0 0 0 b 0 0 c 0 0 0 0 d 0 e 0 0 0 0 0];
为:
x = [a a a a b b b c c c c c d d e e e e e e];
解(diff和cumsum是反函数):
valind = find(x);
x(valind(2:end)) = diff(x(valind));
x = cumsum(x);
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
将向量的元素累加到特定位置上
工具:SPARSE
优化前:
% The values we are summing at designated indices
values = [20 15 45 50 75 10 15 15 35 40 10];
% The indices associated with the values are summed cumulatively
indices = [2 4 4 1 3 4 2 1 3 3 1];
totals = zeros(max(indices),1);
for n = 1:length(indices)
    totals(indices(n)) = totals(indices(n)) + values(n);
end
优化后:
indices = [2 4 4 1 3 4 2 1 3 3 1];
totals = full(sparse(indices,1,values));

注意:这一方法开辟了稀疏矩阵的新用途。在使用sparse命令创建稀疏矩阵时,它是对分配到同一个索引的所有值求和,而不是替代已有的数值。这称为"向量累加",是MATLAB处理稀疏矩阵的方式。

关于MATLAB的效率问题,很多文章,包括我之前写的一些,主要集中在使用向量化以及相关的问题上。但是,最近我在实验时对代码进行profile的过程中,发现在新版本的MATLAB下,for-loop已经得到了极大优化,而效率的瓶颈更多是在函数调用和索引访问的过程中。
由于MATLAB特有的解释过程,不同方式的函数调用和元素索引,其效率差别巨大。不恰当的使用方式可能在本来不起眼的地方带来严重的开销,甚至可能使你的代码的运行时间增加上千倍(这就不是多买几台服务器或者增加计算节点能解决的了,呵呵)。
下面通过一些简单例子说明问题。(实验选在装有Windows Vista的一台普通的台式机(Core2 Duo 2.33GHz + 4GB Ram)进行,相比于计算集群, 这可能和大部分朋友的环境更相似一些。实验过程是对某一个过程实施多次的整体进行计时,然后得到每次过程的平均时间,以减少计时误差带来的影响。多次实验,在均值附近正负20%的范围内的置信度高于95%。为了避免算上首次运行时花在预编译上的时间,在开始计时前都进行充分的“热身”运行。)
函数调用的效率
一个非常简单的例子,把向量中每个元素加1。(当然这个例子根本不需要调函数,但是,用它主要是为了减少函数执行本身的时间,突出函数解析和调用的过程。)
作为baseline,先看看最直接的实现
% input u: u is a 1000000 x 1 vectorv = u + 1;
这个过程平均需要0.00105 sec。
而使用长期被要求尽量避免的for-loop
n = numel(u);% v = zeros(n, 1) has been pre-allocated.for i = 1 : n    v(i) = u(i) + 1;end
所需的平均时间大概是0.00110 sec。从统计意义上说,和vectorization已经没有显著差别。无论是for-loop或者vectorization,每秒平均进行约10亿次“索引-读取-加法-写入”的过程,计算资源应该得到了比较充分的利用。
要是这个过程使用了函数调用呢?MATLAB里面支持很多种函数调用方式,主要的有m-function, function handle, anonymous function, inline, 和feval,而feval的主参数可以是字符串名字,function handle, anonymous function或者inline。
用m-function,就是专门定义一个函数
function y = fm(x)    y = x + 1;
在调用时
for i = 1 : n    v(i) = fm(u(i));end
function handle就是用@来把一个function赋到一个变量上,类似于C/C++的函数指针,或者C#里面的delegate的作用
fh = @fm;for i = 1 : n    v(i) = fh(u(i));end
anonymous function是一种便捷的语法来构造简单的函数,类似于LISP, Python的lambda表达式
fa = @(x) x + 1;for i = 1 : n    v(i) = fa(u(i));end
inline function是一种传统的通过表达式字符串构造函数的过程
fi = inline('x + 1', 'x');for i = 1 : n    v(i) = fi(u(i));end
feval的好处在于可以以字符串方式指定名字来调用函数,当然它也可以接受别的参数。
v(i) = feval('fm', u(i));v(i) = feval(fh, u(i));v(i) = feval(fa, u(i));
对于100万次调用(包含for-loop本身的开销,函数解析(resolution),压栈,执行加法,退栈,把返回值赋给接收变量),不同的方式的时间差别很大: m-function0.385 secfunction handle0.615 secanonymous function0.635 secinline function166.00 secfeval('fm', u(i))8.328 secfeval(fh, u(i))0.618 secfeval(fa, u(i))0.652 secfeval(@fm, u(i))2.788 secfeval(@fa, u(i))34.689 sec

扩展:提高python运行效率 / 提高程序运行效率 / 提高代码运行效率


从这里面,我们可以看到几个有意思的现象:

  • 首先,调用自定义函数的开销远远高于一个简单的计算过程。直接写 u(i) = v(i) + 1 只需要  0.0011 秒左右,而写u(i) = fm(v(i)) 则需要0.385秒,时间多了几百倍,而它们干的是同一件事情。这说明了,函数调用的开销远远大于for-loop自己的开销和简单计算过程——在不同情况可能有点差别,一般而言,一次普通的函数调用花费的时间相当于进行了几百次到一两千次双精度浮点加法。
  • 使用function handle和anonymous function的开销比使用普通的m-函数要高一些。这可能是由于涉及到句柄解析的时间,而普通的函数在第一次运行前已经在内存中进行预编译。
  • inline function的运行时间则令人难以接受了,竟然需要一百多秒(是普通函数调用的四百多倍,是直接计算的十几万倍)。这是因为matlab是在每次运行时临时对字符串表达式(或者它的某种不太高效的内部表达)进行parse。
  • feval(fh, u(i))和fh(u(i)),feval(fa, u(i))和fa(u(i))的运行时间很接近,表明feval在接受句柄为主参数时本身开销很小。但是,surprising的是 for i = 1 : n    v(i) = feval(@fm, u(i));end比起fh = @fm;for i = 1 : n    v(i) = feval(fh, u(i));end慢了4.5倍 (前者0.618秒,后者2.788秒)。
    for i = 1 : n    v(i) = feval(@(x) x + 1, u(i));end比起fa = @(x) x + 1;for i = 1 : n    v(i) = feval(fa, u(i));end竟然慢了53倍(前者0.652秒,后者34.689秒)。
    由于在MATLAB的内部实现中,function handle的解析是在赋值过程中进行的,所以预先用一个变量把句柄接下,其效果就是预先完成了句柄解析,而如果直接把@fm或者@(x) x + 1写在参数列上,虽然写法简洁一些,但是解析过程是把参数被赋值到所调函数的局部变量时才进行,每调用一次解析一次,造成了巨大的开销。
  • feval使用字符串作为函数名字时,所耗时间比传入句柄大,因为这涉及到对函数进行搜索的时间(当然这个搜索是在一个索引好的cache里面进行(除了第一次),而不是在所有path指定的路径中搜索。)
  • 在2007年以后,MATLAB推出了arrayfun函数,上面的for-loop可以写为 v = arrayfun(fh, u)
    这平均需要4.48 sec,这比起for-loop(需时0.615 sec)还慢了7倍多。这个看上去“消除了for-loop"的函数,由于其内部设计的原因,未必能带来效率上的正效果。
    元素和域的访问
    除了函数调用,数据的访问方式对于效率也有很大影响。MATLAB主要支持下面一些形式的访问:

  • array-index  A(i):  
  • cell-index:  C{i};  
  • struct field:  S.fieldname
  • struct field (dynamic):  S.('fieldname')
  • 这里主要探索单个元素或者域的访问(当然,MATLAB也支持对于子数组的非常灵活整体索引)。
    对于一百万次访问的平均时间
    A(i) for a numeric array0.0052 secC{i} for a cell array0.2568 secstruct field0.0045 secstruct field (with dynamic name)1.0394 sec
    我们可以看到MATLAB对于单个数组元素或者静态的struct field的访问,可以达到不错的速度,在主流台式机约每秒2亿次(连同for-loop的开销)。而cell array的访问则明显缓慢,约每秒400万次(慢了50倍)。MATLAB还支持灵活的使用字符串来指定要访问域的语法(动态名字),但是,是以巨大的开销为代价的,比起静态的访问慢了200倍以上。
    关于Object-oriented Programming
    MATLAB在新的版本中(尤其是2008版),对于面向对象的编程提供了强大的支持。在2008a中,它对于OO的支持已经不亚于python等的高级脚本语言。但是,我在实验中看到,虽然在语法上提供了全面的支持,但是matlab里面面向对象的效率很低,开销巨大。这里仅举几个例子。
  • object中的property的访问速度是3500万次,比struct field慢了6-8倍。MATLAB提供了一种叫做dependent property的属性,非常灵活,但是,效率更低,平均每秒访问速度竟然低至2.6万次(这种速度基本甚至难以用于中小规模的应用中)。
  • object中method调用的效率也明显低于普通函数的调用,对于instance method,每百万次调用,平均需时5.8秒,而对于static method,每百万次调用需时25.8秒。这相当于每次调用都需要临时解析的速度,而matlab的类方法解析的效率目前还明显偏低。
  • MATLAB中可以通过改写subsref和subsasgn的方法,对于对象的索引和域的访问进行非常灵活的改造,可以通过它创建类似于数组的对象。但是,一个符合要求的subsref的行为比较复杂。在一个提供了subsref的对象中,大部分行为都需要subsref进行调度,而默认的较优的调度方式将被掩盖。在一个提供了subsref的类中(使用一种最快捷的实现),object property的平均访问速度竟然降到1万5千次每秒。
  • 建议[/U]
    根据上面的分析,对于撰写高效MATLAB代码,我有下面一些建议:

    1. 虽然for-loop的速度有了很大改善,vectorization(向量化)仍旧是改善效率的重要途径,尤其是在能把运算改写成矩阵乘法的情况下,改善尤为显著。
    2. 在不少情况下,for-loop本身已经不构成太大问题,尤其是当循环体本身需要较多的计算的时候。这个时候,改善概率的关键在于改善循环体本身而不是去掉for-loop。
    3. MATLAB的函数调用过程(非built-in function)有显著开销,因此,在效率要求较高的代码中,应该尽可能采用扁平的调用结构,也就是在保持代码清晰和可维护的情况下,尽量直接写表达式和利用built-in function,避免不必要的自定义函数调用过程。在次数很多的循环体内(包括在cellfun, arrayfun等实际上蕴含循环的函数)形成长调用链,会带来很大的开销。
    4. 在调用函数时,首选built-in function,然后是普通的m-file函数,然后才是function handle或者anonymous function。在使用function handle或者anonymous function作为参数传递时,如果该函数被调用多次,最好先用一个变量接住,再传入该变量。这样,可以有效避免重复的解析过程。

      扩展:提高python运行效率 / 提高程序运行效率 / 提高代码运行效率

    5. 在可能的情况下,使用numeric array或者struct array,它们的效率大幅度高于cell array(几十倍甚至更多)。对于struct,尽可能使用普通的域(字段,field)访问方式,在非效率关键,执行次数较少,而灵活性要求较高的代码中,可以考虑使用动态名称的域访问。
    6. 虽然object-oriented从软件工程的角度更为优胜,而且object的使用很多时候很方便,但是MATLAB目前对于OO的实现效率很低,在效率关键的代码中应该慎用objects。
    7. 如果需要设计类,应该尽可能采用普通的property,而避免灵活但是效率很低的dependent property。如非确实必要,避免重载subsref和subsasgn函数,因为这会全面接管对于object的接口调用,往往会带来非常巨大的开销(成千上万倍的减慢),甚至使得本来几乎不是问题的代码成为性能瓶颈。

    扩展:提高python运行效率 / 提高程序运行效率 / 提高代码运行效率

    四 : 推行“一个窗口对外” 提高行政效能

    推行“一个窗口对外” 提高行政效能

    区行政服务中心在区委区政府的正确领导下,紧紧围绕“依法行政、优化环境、服务企业、方便群众”这一宗旨,全力搞好全区行政审批工作的协调、监督和服务工作,大力推行“服务最优,办件提速,效能最好”系列得力举措,取得明显成效。中心从2004年6月8日正式挂牌运行到今年  月  日止,共受理各类行政审批事项    件,办结     件,办结率    %;受理各类投诉案件   件,办结率达    %。同时,中心代行政收费    万元。

    通过近一年的实践、探索和调整,中心制度建设、内部管理、网络建设、作风建设、考勤考核等工作成效明显,走在全区的前列。中心在抓行政审批服务与改革,推行“一个窗口对外”,提高行政效能上,主要抓了以下几个方面的工作。

        一、规范运作,把中心建成转变政府职能的“平台”。

    为了提高办事效率,使中心成为敞开的行政,公平的窗口,效能的快车,中心在规范运作上狠下功夫,通过实行“一个窗口对外”的工作运行机制,积极推行政务公开,狠抓审批事项清理和办事程序的简化,把规范运作和优质服务贯穿工作始终。

    一是对进入服务中心的行政审批事项实行“六公开”。即许可内容公开,办事程序公开,政策依据公开,申报要求公开,服务时限公开,收费项目及标准公开,从根本上杜绝了过去审批不透明,收费不规范,申报材料不明确等现象。中心25个窗口单位的229项行政审批事项全部通过互联网、政务公开栏、服务指南、便民柜、窗口办事须知等多种形式全方位公开,实现了阳光审批、透明作业。

        二是对审批项目实行“五制”。即首办负责制,直接办理制,限时承诺办理制,联合办理制,申报代办制。如×××等项目,由中心牵头,会同有关职能部门现场办公,及时办理。

        三是规范运作,建立健全各项管理制度。区政府于去年先后出台了《区行政服务中心行政审批事项》和《区行政服务中心工作服务指南》,使进入中心的行政审批事项和审批程序得以规范。为了贯彻实施《行政许可法》,区政府又出台了《区行政服务中心办理事项管理暂行办法》》,为中心提供了重要的政策保证。与此同时,中心也建立和完善了内部管理制度,做到用制度管人、管事。先后制订了《江夏区行政服务中心例会制度》、《江夏区政务服务中心工作人员服务规范》、《江夏区政务服务中心首问责任制》等各项制度16个。通过出台一系列规章制度,使全区政务服务工作运作有序,有章可循。

        四是简化审批环节,规范办事程序,压缩办件时间。

        第一,对进入中心的行政审批事项进行再清理。去年,全区首批进入中心的行政审批事项达   项。   (介绍四次清理的详细情况)      涉及33个部门。进一步明确了行政执法主体和行政审批事项。

    第二,对审批事项的内部运作环节进行再简化。中心通过上门、召开座谈会等形式征求意见,进行协调,对审批事项的内部运作环节进行调整和优化。如×××、×××撤销了单位原来的办证大厅,将行政审批事项整体纳入中心办理,同时对内部机构和人员进行了调整,不仅方便了群众,提高了效率,而且还大大降低了行政成本。区地税局还专门为窗口架设了专线,直接与市联网,方便了群众办证业务;区建设局将系统内二级单位的   项行政审批事项和一项特殊性服务事项全部纳入中心办理,不仅真正做到了“应进必进”,而且这38项审批和服务事项,仅由4名女同志全权在窗口受理和承办,局班子一个星期开一次审批办公会,对所有审批事项集中研究,切实做到“一个窗口受理,一个窗口收费,一个窗口拿证”,行政成本大大降低,行政效能得到了提高;同时经局班子研究,给每名窗口工作人员配发了一套工作服,并倡导微笑服务,使窗口整体形象也得到提高;区工商局为了适应工作需要,实行“一张纸、一支笔、一口清”的工作方法,使群众办事清楚明白。他们还印制了《江夏区工商局服务名牌》,免费发给办事群众,接受群众监督。随着《行政许可法》的实施,从去年7月起,区各单位实行正副局长窗口值班制,一周一轮换,现场全权审批各种办证事项,,解答各类问题,群众反响良好。如区×××企业集团,从筹划、定名、拿照都是由中心工商局窗口负责代办,派人到市、省跑手续,使原本需要一个月才能办妥的证件,仅一个星期就全部办结;区卫生局大力简化内部办事环节,办理“健康证”,过去要跑4个地方经过5道程序,两天时间办结,现在只需在窗口内一天内办结。办理“卫生许可证”过去要到4个地方,经过7个环节才有可能办妥,目前办理卫生许可证只需经过3个环节即可办成;区房管局关闭办证大厅统一进服务中心窗口办理业务后,房屋所有权初始登记由原来要到6个地方,经过9个环节减少为在窗口内经过4个环节即可办成。产权交易中心正副主任轮流到窗口坐班,当场解决实际问题;区公安局切实压缩办证时间,办理身份证过去需60天时间,现在10天内就可办结;区农业局对窗口办理农机审批事项实行充分授权,他们积极到市主管部门做工作,将农机行驶证的制证权从市争取下放到中心办理,办证时间由原来的15天以上缩短为当场办理;区文体局分别将区文化体育局和区新闻出版局两枚“办证专用章”放到窗口,15项行政审批事项全部纳入中心办理,连“网吧审批”也直接在窗口当场办结,做到了“应进必进,授权充分,即时办结”;区人事局主动与中心联系,在中心设立窗口,将机关干部调入江夏区、职称评审、公务员录用、办证、收费等项目集中到中心办理。

    上述一个个典型事例,都是各单位和窗口推行“一个窗口对外”,切实为人民服务的具体体现;是提高行政效能的重要举措;是解放思想,深化行政审批改革与服务的模范行动。正是由于这些单位、窗口和工作人员的努力和创新,使得中心得到社会和上级单位领导的首肯和一致好评。

        二、利民便商,把中心建成联系人民群众的“纽带”。

    我们的政府是人民的政府,服务中心作为区政府的派出机构,是直接跟老百姓打交道,直接为人民群众提供审批办证服务的。因此,中心的出发点和落脚点都是亲商便民,服务群众,服务基层。中心克服办公场地不足,资金短缺等困难,想方设法,为办事群众提供良好的服务环境,让办事群众在中心享受“超市”的便捷和家庭般的温暖。第一,办好政府政务公开栏。中心将行政审批事项,包括每一项的项目序号、服务项目、法律依据、服务程序、申报材料、收费标准及依据、承诺时限等内容全部在大厅电子触摸屏和电子显示屏上公开。同时在电子显示屏上设置了光荣榜,将评选出的“红旗窗口”和“服务先进明星”进行滚动播放;第二,设立便民柜和投诉箱。将《服务指南》和25个窗口的《服务须知》及卫生纸、风油精等应急用品放入专盒中,进一步方便群众。同时,投诉箱直接在便民柜中,方便群众投诉;第三,在办证大厅设置便民坐椅和饮水机,提供饮用杯;第四,在大厅显要位置公告投诉中心投诉电话 87916706和语音查询电话;第五,强化中心网络建设。与区政府网络共享链接,进一步扩大了中心影响,为查询、咨询提供便利条件;第六,启用了备用ups电源,保证停电后办证大厅工作照常运转,确保群众办事不跑空路。

    中心始终把群众方便不方便,高兴不高兴,满意不满意作为检验工作好坏的标准,从根本上改变了过去“门难进、脸难看、话难听、事难办”的现象,密切了政府和人民群众的关系。通过开展微笑服务活动,办证群众口头和书面表扬信函    多次。   (列举一些具体的事例)    。 同时,窗口人员时刻牢记“宁可自己麻烦百次,也不让群众麻烦一次”的服务理念,热情为群众服务。区工商局窗口加班加点到深夜,今年3月以来,全区企业年检申报和变更进入高峰期,加上党员先进性教育活动蓬勃开展,他们认真解决工作和学习的矛盾,为了不影响企业年检,采取中午不休息、晚上加班加点,昼夜工作的方法,把双休日变成了工作日。仅3月份该窗口就办理各类行政审批事项    件,办结率达100%。不少前来办事的群众说:“没想到你们的工作这么忙,没想到你们的态度这么好,没想到你们的效率这么高!”

        三、微笑服务,把中心建成展示政府形象的“窗口”。

        “把方便让给群众,把困难留给自己”,微笑服务,热情服务,已经成为窗口工作人员的座佑铭。中心结合全区机关干部作风集中整治活动,在全体工作人员中大力推行五大方面的文明用语,规定了十不准事项。五大方面的文明用语:一是与服务对象交谈时须口齿清楚、条理清晰、言简意赅、用语文明。同时提倡工作人员说普通话,与外地服务对象交谈时必须使用普通话。二是接听服务对象电话时,应说:“您好,区行政服务中心××窗口,请讲”、“您有什么事?”、“我能转达吗?”、“请稍等一下”、“请您再说一遍”。中断或挂线时,应先征得对方同意。三是接待服务对象时,应说:“您好,你要办什么业务?”或者“请您找××窗口”,并指明准确位置。四是给服务对象办理业务时,可以说“请稍等”、“请填写”、“请缴费”、“请您听我详细解释一下好吗”、“你的手续己办好,请校对”、“请保管好您的材料”、“请您×月×日来领取证照”等等。当服务对象提出好的建议时,应该说:“您的建议很好,我们马上改进”,或说“向有关单位反映。”五是服务对象办完业务离开时,工作人员应说“请慢走”或“再见”,还未办妥的,应说“对不起,请补全手续再来办理”、“谢谢您的合作”等等。当服务对象感谢时,应该说“谢谢,这是我应该做的。”

        十不准事项是:(一)不准向服务对象索取钱物或报销应由个人支付的各种费用及礼金、有价证券和支付凭证;(二)不准接受服务对象的礼物馈赠和宴请;不准借婚丧、乔迁、出国之机向服务对象敛财;(三)不准接受服务对象安排的境内外旅游;(四)不准借用占用服务对象或其所属单位的通信、交通工具;(五)不准拖延审批时间或向服务对象刁难、卡要;(六)不准利用行政审批的权力从事经商办企业活动;不准在审批企业中投资入股,在经济实体中兼职和兼职取酬(七)不准违反规定从事有偿的中介活动或与审批职权范围内的企事业单位社会团体发生商品、劳务、借贷、担保等经济关系;(八)不准为亲友经商办企业提供便利和优惠条件为不够审批条件的亲友违规办理审批手续;(九)不准为亲友招揽业务,谋取不正当利益或在职权范围内伙同亲友或以亲友的名义经商办企业;(十)不准利用职权要求服务对象安排自己的配偶、子女和亲友工作。中心以此为突破口,狠抓服务态度、办事效率和服务纪律,收到较好效果。区交通局驻中心窗口工作人员默默无闻服务基层,受到服务对象的好评。自进驻中心以来,把服务群众,微笑服务作为自己的服务准则,窗口累计受理各类行政审批事项     件,办结    件,办结率达到  %以上。与此同时,还热情为基层办理许多服务事项。在去冬今春春运期间,他们加班加点为全区    台春运车辆办理了春运证,为全区    台车辆办理了二级维护检测报告,同时办理临时线路牌、包车单    份,办理非营运证审验   台,还整理了全区    台车辆的车辆档案。

        目前,中心上下“窗口围绕群众转,单位围绕窗口转,一切围绕发展转”的良好氛围正在形成。

    四、搞好监督,把中心建成经济发展环境的“卫士”

    人人是环境,事事是环境,处处是环境。区经济发展环境投诉中心认真抓好全区经济发展环境案件的投诉受理和调查处理工作。一年来,认真受理各类投诉,努力促进经济发展环境的进一步改善。全年受理各类投诉××件,已全部办结和回复。在处理投诉中,坚持“三到位”,即坚持查清投诉事实,调查核实到位;查清相关政策,分析研究到位;搞好组织协调,督促落实到位。简单的投诉,当天办结;一般投诉3个工作日办结;较为复杂的投诉7个工作日办结。在办理投诉过程中,既注重治“标”,就事论事,通过协调,消除矛盾,解决问题;更注重治“本”,分析产生问题的原因,寻求解决问题的办法和措施,消除产生问题的根源,收效明显。

    总之,“中心”的工作还才刚刚起步,虽然取得了明显的成效,但也还存在不少问题,主要是硬件设施不适应发展的要求,行政审批事项“应进必进”和“充分授权”不够,审批行为“双轨运行”的现象仍然存在,老百姓办事有时仍感到很难,很麻烦。这些困难和问题还需要我们在实践中去探索解决的办法。在今后的工作中,中心根据省、市和区委区政府的有关要求,将以积极开展党员先进性教育为切入点,努力实现全区行政审批事项“应进必进”、“充分授权”、“前后互动”、“全面监管”,落实“首席代表制”、“格式文书制”,以及“执法预约(报告)制”和检查评比“备案登记制”,努力做到行政审批流程最短,手续最简,收费最低,效率最高,服务最优。努力把行政服务中心办成效能政府的重要平台,坚决推行“一个窗口对外”,为进一步优化全区经济发展环境,打造和谐江夏切实履行职责,为全区经济文明建设作出新贡献。

    五 : 推行“一个窗口对外” 提高行政效能

    推行“一个窗口对外” 提高行政效能 区行政服务中心在区委区政府的正确领导下,紧紧围绕“依法行政、优化环境、服务企业、方便群众”这一宗旨,全力搞好全区行政审批工作的协调、监督和服务工作,大力推行“服务最优,办件提速,效能最好”系列得力举措,取得明显成效。中心从~年6月8日正式挂牌运行到今年  月  日止,共受理各类行政审批事项    件,办结     件,办结率    %;受理各类投诉案件   件,办结率达    %。同时,中心代行政收费    万元。 通过近一年的实践、探索和调整,中心制度建设、内部管理、网络建设、作风建设、考勤考核等工作成效明显,走在全区的前列。中心在抓行政审批服务与改革,推行“一个窗口对外”,提高行政效能上,主要抓了以下几个方面的工作。     一、规范运作,把中心建成转变政府职能的“平台”。 为了提高办事效率,使中心成为敞开的行政,公平的窗口,效能的快车,中心在规范运作上狠下功夫,通过实行“一个窗口对外”的工作运行机制,积极推行政务公开,狠抓审批事项清理和办事程序的简化,把规范运作和优质服务贯穿工作始终。 一是对进入服务中心的行政审批事项实行“六公开”。即许可内容公开,办事程序公开,政策依据公开,申报要求公开,服务时限公开,收费项目及标准公开,从根本上杜绝了过去审批不透明,收费不规范,申报材料不明确等现象。中心25个窗口单位的229项行政审批事项全部通过互联网、政务公开栏、服务指南、便民柜、窗口办事须知等多种形式全方位公开,实现了阳光审批、透明作业。     二是对审批项目实行“五制”。即首办负责制,直接办理制,限时承诺办理制,联合办理制,申报代办制。如×××等项目,由中心牵头,会同有关职能部门现场办公,及时办理。     三是规范运作,建立健全各项管理制度。区政府于去年先后出台了《区行政服务中心行政审批事项》和《区行政服务中心工作服务指南》,使进入中心的行政审批事项和审批程序得以规范。为了贯彻实施《行政许可法》,区政府又出台了《区行政服务中心办理事项管理暂行办法》》,为中心提供了重要的政策保证。与此同时,中心也建立和完善了内部管理制度,做到用制度管人、管事。先后制订了《江夏区行政服务中心例会制度》、《江夏区政务服务中心工作人员服务规范》、《江夏区政务服务中心首问责任制》等各项制度16个。通过出台一系列规章制度,使全区政务服务工作运作有序,有章可循。     四是简化审批环节,规范办事程序,压缩办件时间。     第一,对进入中心的行政审批事项进行再清理。去年,全区首批进入中心的行政审批事项达   项。   (介绍四次清理的详细情况)      涉及33个部门。进一步明确了行政执法主体和行政审批事项。 第二,对审批事项的内部运作环节进行再简化。中心通过上门、召开座谈会等形式征求意见,进行协调,对审批事项的内部运作环节进行调整和优化。如×××、×××撤销了单位原来的办证大厅,将行政审批事项整体纳入中心办理,同时对内部机构和人员进行了调整,不仅方便了群众,提高了效率,而且还大大降低了行政成本。区地税局还专门为窗口架设了专线,直接与市联网,方便了群众办证业务;区建设局将系统内二级单位的   项行政审批事项和一项特殊性服务事项全部纳入中心办理,不仅真正做到了“应进必进”,而且这38项审批和服务事项,仅由4名女同志全权在窗口受理和承办,局班子一个星期开一次审批办公会,对所有审批事项集中研究,切实做到“一个窗口受理,一个窗口收费,一个窗口拿证”,行政成本大大降低,行政效能得到了提高;同时经局班子研究,给每名窗口工作人员配发了一套工作服,并倡导微笑服务,使窗口整体形象也得到提高;区工商局为了适应工作需要,实行“一张纸、一支笔、一口清”的工作方法,使群众办事清楚明白。他们还印制了《江夏区工商局服务名牌》,免费发给办事群众,接受群众监督。随着《行政许可法》的实施,从去年7月起,区各单位实行正副局长窗口值班制,一周一轮换,现场全权审批各种办证事项,,解答各类问题,群众反响良好。如区×××企业集团,从筹划、定名、拿照都是由中心工商局窗口负责代办,派人到市、省跑手续,使原本需要一个月才能办妥的证件,仅一个星期就全部办结;区卫生局大力简化内部办事环节,办理“健康证”,过去要跑4个地方经过5道程序,两天时间办结,现在只需在窗口内一天内办结。办理“卫生许可证”过去要到4个地方,经过7个环节才有可能办妥,目前办理卫生许可证只需经过3个环节即可办成;区房管局关闭办证大厅统一进服务中心窗口办理业务后,房屋所有权初始登记由原来要到6个地方,经过9个环节减少为在窗口内经过4个环节即可办成。产权交易中心正副主任轮流到窗口坐班,当场解决实际问题;区公安局切实压缩办证时间,办理身份证过去需60天时间,现在10天内就可办结;区农业局对窗口办理农机审批事项实行充分授权,他们积极到市主管部门做工作,将农机行驶证的制证权从市争取下放到中心办理,办证时间由原来的15天以上缩短为当场办理;区文体局分别将区文化体育局和区新闻出版局两枚“办证专用章”放到窗口,15项行政审批事项全部纳入中心办理,连“网吧审批”也直接在窗口当场办结,做到了“应进必进,授权充分,即时办结”;区人事局主动与中心联系,在中心设立窗口,将机关干部调入江夏区、职称评审、公务员录用、办证、收费等项目集中到中心办理。 上述一个个典型事例,都是各单位和窗口推行“一个窗口对外”,切实为人民服务的具体体现;是提高行政效能的重要举措;是解放思想,深化行政审批改革与服务的模范行动。正是由于这些单位、窗口和工作人员的努力和创新,使得中心得到社会和上级单位领导的首肯和一致好评。     二、利民便商,把中心建成联系人民群众的“纽带”。 我们的政府是人民的政府,服务中心作为区政府的派出机构,是直接跟老百姓打交道,直接为人民群众提供审批办

    问题,主要是硬件设施不适应发展的要求,行政审批事项“应进必进”和“充分授权”不够,审批行为“双轨运行”的现象仍然存在,老百姓办事有时仍感到很难,很麻烦。这些困难和问题还需要我们在实践中去探索解决的办法。在今后的工作中,中心根据省、市和区委区政府的有关要求,将以积极开展党员先进性教育为切入点,努力实现全区行政审批事项“应进必进”、“充分授权”、“前后互动”、“全面监管”,落实“首席代表制”、“格式文书制”,以及“执法预约(报告)制”和检查评比“备案登记制”,努力做到行政审批流程最短,手续最简,收费最低,效率最高,服务最优。努力把行政服务中心办成效能政府的重要平台,坚决推行“一个窗口对外”,为进一步优化全区经济发展环境,打造和谐江夏切实履行职责,为全区经济文明建设作出新贡献。

    本文标题:提高行政效率-对于完善管理机制和提高公务员行政效率
    本文地址: http://www.61k.com/1112553.html

    61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1