精华内容
下载资源
问答
  • C++中两种常用的记录程序运行时间的方法的总结

    万次阅读 多人点赞 2016-05-13 13:13:24
    本篇博客对C++中常用的记录程序运行时间的方法进行简单的总结。

    关于C++中计算时间的一些总结


    方法一:clock()计时函数

    clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:
    clock_t clock(void) ;
    简单而言,就是该程序从启动到函数调用占用CPU的时间。这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock);若挂钟时间不可取,则返回-1。其中clock_t是用来保存时间的数据类型。
    在time.h文件中,我们可以找到对clock_t()的定义:
    <span style="font-size:14px;">#ifndef _CLOCK_T_DEFINED
    	typedef long clock_t;
    #define _CLOCK_T_DEFINED
    #endif</span>

    很明显,clock_t是一个长整形数。在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:

    #define CLOCKS_PER_SEC ((clock_t)1000)

    测试程序:

    <span style="font-size:14px;"><span style="font-size:18px;">#include<iostream>
    #include<time.h>
    
    using namespace std;
    
    int main()
    {
    	clock_t startTime,endTime;
    	startTime = clock();
    	for (int i = 0; i < 1000000; i++)
    	{
    		i++;
    	}
    	endTime = clock();
    	cout << "Totle Time : " <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
    	system("pause");
    	return 0;
    }</span></span>
    <span style="font-size:14px;">#include<iostream>
    #include<time.h>
    
    using namespace std;
    
    int main()
    {
    	for (int i = 0; i < 1000000; i++)
    	{
    		i++;
    	}
    	cout << "Totle Time : " << (double)clock() /CLOCKS_PER_SEC<< "s" << endl;
    	system("pause");
    	return 0;
    }</span>

    方法二:GetTickCount()函数:

    GetTickCount是函数。GetTickCount返回(retrieve)从操作系统启动所经过(elapsed)的毫秒数,它的返回值是DWORD。
    函数原型:
    DWORD GetTickCount(void);
    头文件:
    C/C++头文件:winbase.h
    windows程序设计中可以使用头文件windows.h
    测试代码:
    <span style="font-size:14px;">#include<iostream>
    #include<Windows.h>
    
    using namespace std;
    
    int main()
    {
    	DWORD start_time = GetTickCount();
    	for (int i = 0; i < 100000000; i++)
    	{
    		i++;
    	}
    	DWORD end_time = GetTickCount();
    	cout << "The run time is:" << (end_time - start_time) << "ms!" << endl;
    	system("pause");
    	return 0;
    }</span>
    注意事项:
    GetTickcount函数:它返回从操作系统启动到当前所经过的毫秒数,常常用来判断某个方法执行的时间,其函数原型是DWORD GetTickCount(void),返回值以32位的双字类型DWORD存储,因此可以存储的最大值是(2^32-1) ms约为49.71天,因此若系统运行时间超过49.71天时,这个数就会归0,MSDN也明确的提到了:"Retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days."。因此,如果是编写服务器端程序,此处一定要万分注意,避免引起意外的状况。
    特别注意:这个函数并非实时发送,而是由系统每18ms发送一次,因此其最小精度为18ms。当需要有小于18ms的精度计算时,应使用StopWatch方法进行。
    用clock()函数计算运行时间,表示范围一定大于GetTickCount()函数,所以,建议使用clock()函数。



    展开全文
  • 两种方差计算公式: 1/n∑i=0nxi2−∑i=0nxi∗u\sum_{i=0}^n x_i^2 - \sum_{i=0}^n x_i * u∑i=0n​xi2​−∑i=0n​xi​∗u 1/n∑i=0n(xi−u)2\sum_{i=0}^n (x_i - u) ^2∑i=0n​(xi​−u)2 u=1n∑i=0nxiu = \frac{1...

    第一博客
    公众号:深度学习视觉


    由于近期看见了BN中方差新的计算方法,不明白为什么要用那种计算方式,所以做了一次简单的性能测试。
    两种方差计算公式:
    1/ni=0nxi2i=0nxiu\sum_{i=0}^n x_i^2 - \sum_{i=0}^n x_i * u

    1/ni=0n(xiu)2\sum_{i=0}^n (x_i - u) ^2

    u=1ni=0nxiu = \frac{1}{n}\sum_{i=0}^n x_i

    方法名 1 2 3 4 5 mean 备注 备注
    input_.sum() 0.005 0.005 0.005 0.004 0.005 0.0047 np sum+int
    input_.mean() 0.012 0.009 0.109 0.109 0.009 0.0107 np mean+int
    np.power(input_,2).sum() 0.051 0.046 0.045 0.044 0.046 0.047 np power+sum+int
    np.power(input_,2) 0.044 0.041 0.040 0.040 0.040 0.041 np power+int
    _.sum 0.004 0.004 0.005 0.005 0.005 0.0045 np:上面数值求和 sum+int
    np.power(input_ - mean,2) 0.44 0.44 0.44 0.44 0.44 0.44 np power减法+int
    _.sum() 0.004 0.004 0.004 0.005 0.004 0.0041 np:上面数值求和 sum+int
    np.power(input_ + mean,2) 0.40 0.41 0.41 0.41 0.42 0.412 np,mean=3.5 power加法+float
    sum() / len() 0.006 0.005 0.004 0.005 0.007 0.0055 自定义均值:先求和再均值 自定义sum+div+len+int
    np.power(input_,2) 0.043 0.052 0.045 0.041 0.042 0.0446 变快:input在整型的情况下 power+int
    np.power(input_,2) 0.32 0.32 0.32 0.32 0.32 0.32 float64 power+float
    input_ + mean 0.0418 0.0418 0.0418 0.043 0.0418 0.0418 float64 np_array+float
    np.power(input_+mean,2) 0.411 0.412 0.412 0.411 0.417 0.412 float64 power加法+float
    自定义方差 0.35 0.34 0.36 0.36 0.34 0.35 float64 power + sum+div+len+float
    np.power(input_,2).sum() 0.329 0.342 0.33 0.33 0.337 0.33 float64 power + sum+float
    1. 主要消耗在power中有运算操作。比如power(a+b)

    以下是测试代码,需要的自取测试。

    import numpy as np
    import time
    input_ = np.random.randint(0,10,(10000000))
    

    定义时间消耗计时器

    def getTimeCost(f):
        def wrapper(*args,**kwargs):
            # x是从被修饰函数中传入的一个参数
            start = time.time()
            result = f(*args,**kwargs)
            end = time.time()
            print("{}:  costTime:{}".format(f.__name__,(end - start)))
            return end - start
        return wrapper
    

    每部分时间消耗

    @getTimeCost
    def getVar_fast2(input_):
        
        st1 = time.time()
        numel = len(input_)
        et1 = time.time()
        print("len(input_):",et1-st1)
        
        sum_ = input_.sum()
        et2 = time.time()
        print("input_.sum():",et2-et1)
        
        mean = sum_ / numel
        et3 = time.time()
        print("sum div numel:",et3-et2)
        
        square = np.power(input_,2)
        et4 = time.time()
        print("np.power(input_,2):",et4-et3)
        
        sum_of_square = square.sum()
        et5 = time.time()
        print("square.sum():",et5-et4)
    
        sumvar = sum_of_square - sum_ * mean
        et6 = time.time()
        print("sum_of_square:",et6-et5)
        
        return sumvar
    
    @getTimeCost
    def getVar_np2(input_):
        
        st1 = time.time()
        mean = input_.mean()
        et1 = time.time()
        print("input_.mean:",et1-st1)
        
        et2 = time.time()
        minus = input_ - mean
        print("minus=input_ - mean:",et2-et1)
        
        power = np.power(minus,2).sum()
        et3 = time.time()
        print("input_.power(minus,2):",et3-et2)
        
        sumvar = power.sum()
        et4 = time.time()
        print("power.sum():",et4-et3)
        
        return sumvar
    
    print("1.",40*"=")
    x = input_ * 1.1
    r = [getVar_fast2(x) for i in range(1)]
    print("all mean:",np.array(r).mean())
    
    print("2.",40*"=")
    r = [getVar_np2(x) for i in range(1)]
    print("all mean:",np.array(r).mean())
    

    时间消耗数值

    1. ========================================
    len(input_): 0.0
    input_.sum(): 0.014959335327148438
    sum div numel: 0.0
    np.power(input_,2): 0.33510398864746094
    square.sum(): 0.012965917587280273
    sum_of_square: 0.0
    getVar_fast2:  costTime:0.3700096607208252
    all mean: 0.3700096607208252
    2. ========================================
    input_.mean: 0.023946523666381836
    minus=input_ - mean: 0.0
    input_.power(minus,2): 0.46773767471313477
    power.sum(): 0.0
    getVar_np2:  costTime:0.5006604194641113
    all mean: 0.5006604194641113
    

    两种方差计算方法如下

    @getTimeCost
    def getVar_fast2(input_):
        numel = len(input_)
        sum_ = input_.sum()
        mean = sum_ / numel
        
        sum_of_square = np.power(input_,2).sum()
        sumvar = sum_of_square - sum_ * mean
        
        return sumvar
    
    @getTimeCost
    def getVar_np2(input_):
        mean = input_.mean()
        sumvar = np.power(input_ - mean,2).sum()
        
        return sumvar
    
    getVar_fast2(input_)
    getVar_np2(input_)
    
    #cost time: 0.05784344673156738
    #cost time: 0.4697434902191162
    

    计算求和的时间消耗

    @getTimeCost
    def getSum(input_):
        sum_ = input_.sum()
        
    getSum(input_)
    # out: getSum:  costTime:0.006983041
    

    计算方差计算部分的时间消耗

    numel = len(input_)
    sum_ = input_.sum()
    mean = sum_ / numel
    
    @getTimeCost
    def getVar_fast1(input_1):
        sum_of_square = np.power(input_,2).sum()
        sumvar = sum_of_square - sum_ * mean
        
        return sumvar
    
    
    mean = input_.mean()
    @getTimeCost
    def getVar_np1(input_1):
        sumvar = np.power(input_ - mean,2).sum()
        
        return sumvar
    
    getVar_fast1(input_)
    getVar_np1(input_)
    
    # getVar_fast1:  costTime:0.048866748
    # getVar_np1:  costTime:0.4687469
    

    计算均值部分的时间消耗

    @getTimeCost
    def getMean_fast1(input_):
        numel = len(input_)
        sum_ = input_.sum()
        mean = sum_ / numel
        
        return mean
    
    @getTimeCost
    def getMean_np1(input_):
        mean = input_.mean()
        
        return mean
    
    getMean_fast1(input_)
    getMean_np1(input_)
    
    # getMean_fast1:  costTime:0.0059847831
    # getMean_np1:  costTime:0.010972023
    
    展开全文
  • python记录程序运行时间的两种方法

    千次阅读 2019-05-07 13:55:43
    方法一 import time start = time.perf_counter() //起始时间 x=10 y=x*x*x //要运行代码块 end = time.perf_counter() //结束时间 print('%.10f'%(end - start)) //输出运行时间,精确到小数点后十位 使用python...

    方法一

    import time
    start = time.perf_counter()    //起始时间
    x=10
    y=x*x*x                        //要运行的代码块
    end = time.perf_counter()      //结束时间
    print('%.10f'%(end - start))   //输出运行时间,精确到小数点后十位
    

    使用python自带的time库记录程序运行的起始和结束时间

    方法二

    import cv2
        
    start = cv2.getTickCount()       //起始时间
    x=10
    y=x*x*x                          //代码块
    end = cv2.getTickCount()         //结束时间
    t='%.10f'%((end-start)/cv2.getTickFrequency()) //时间间隔除以周期,换算成秒为单位
    print(t)
    

    调用opencv中的时间函数记录时间

    展开全文
  • 题目:C++中两种常用的记录程序运行时间的方法的总结 方法一:clock()计时函数 clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下: clock_t clock(void)...

    题目:C++中两种常用的记录程序运行时间的方法的总结

    方法一:clock()计时函数

    clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:
    clock_t clock(void) ;
    简单而言,就是该程序从启动到函数调用占用CPU的时间。这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock);若挂钟时间不可取,则返回-1。其中clock_t是用来保存时间的数据类型。
    在time.h文件中,我们可以找到对clock_t()的定义:
    #ifndef _CLOCK_T_DEFINED  
        typedef long clock_t;  
    #define _CLOCK_T_DEFINED  
    #endif

    很明显,clock_t是一个长整形数。在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:

    #define CLOCKS_PER_SEC ((clock_t)1000)

    测试程序:

    #include<iostream>  
    #include<time.h>  
      
    using namespace std;  
      
    int main()  
    {  
        clock_t startTime,endTime;  
        startTime = clock();  
        for (int i = 0; i < 1000000; i++)  
        {  
            i++;  
        }  
        endTime = clock();  
        cout << "Totle Time : " <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;  
        system("pause");  
        return 0;  
    }
    #include<iostream>  
    #include<time.h>  
      
    using namespace std;  
      
    int main()  
    {  
        for (int i = 0; i < 1000000; i++)  
        {  
            i++;  
        }  
        cout << "Totle Time : " << (double)clock() /CLOCKS_PER_SEC<< "s" << endl;  
        system("pause");  
        return 0;  
    }

    方法二:GetTickCount()函数:

    GetTickCount是函数。GetTickCount返回(retrieve)从操作系统启动所经过(elapsed)的毫秒数,它的返回值是DWORD。
    函数原型:
    DWORD GetTickCount(void);
    头文件:
    C/C++头文件:winbase.h
    windows程序设计中可以使用头文件windows.h
    测试代码:
    #include<iostream>  
    #include<Windows.h>  
      
    using namespace std;  
      
    int main()  
    {  
        DWORD start_time = GetTickCount();  
        for (int i = 0; i < 100000000; i++)  
        {  
            i++;  
        }  
        DWORD end_time = GetTickCount();  
        cout << "The run time is:" << (end_time - start_time) << "ms!" << endl;  
        system("pause");  
        return 0;  
    }
    注意事项:
    GetTickcount函数:它返回从操作系统启动到当前所经过的毫秒数,常常用来判断某个方法执行的时间,其函数原型是DWORD GetTickCount(void),返回值以32位的双字类型DWORD存储,因此可以存储的最大值是(2^32-1) ms约为49.71天,因此若系统运行时间超过49.71天时,这个数就会归0,MSDN中也明确的提到了:"Retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days."。因此,如果是编写服务器端程序,此处一定要万分注意,避免引起意外的状况。
    特别注意:这个函数并非实时发送,而是由系统每18ms发送一次,因此其最小精度为18ms。当需要有小于18ms的精度计算时,应使用StopWatch方法进行。
    用clock()函数计算运行时间,表示范围一定大于GetTickCount()函数,所以,建议使用clock()函数。





    展开全文
  • 1.获取当前时间的两种方法:import datetime,timenow = time.strftime("%Y-%m-%d %H:%M:%S")print nownow = datetime.datetime.now()print now2.获取上个月最后一天的日期(本月的第一天减去1天)last = datetime.date...
  • 1.classLoader得到配置文件数据 package com.spring.jdbc.jdbcTemplate; import java.io.IOException; import java.io.InputStream; import java.util.Properties;... * @version 创建时间...
  • python记录程序运行时间的种方法

    万次阅读 2018-01-10 16:35:44
    1.获取当前时间的两种方法: 复制代码 代码如下: import datetime,time now = time.strftime("%Y-%m-%d %H:%M:%S") print now now = datetime.datetime.now() print now 2.获取上个月最后一天的日期(本月...
  • 自己在看别人代码的时候发现了两种不同的获得linux进程启动时间的方法,现在记录下来,方便以后查看。 方法一:根据进行的pid,获得进程相关的文件夹,/proc/pid。将这个文件夹被修改的时间作为进程的启动时间。...
  • Java有现成工具类可以用,Calendar就可以,最近又发现String.format也可以,所以把两种都整理一下。 1.Calendar /** * Calendar获取年月日时分秒 * @param date */ private static void test10(Date date) {
  • 本文为大家介绍两种同步linux时间的方法,供大家参考 方法1: 与一个已知的时间服务器同步  ntpdate time.nist.gov 其中 time.nist.gov 是一个时间服务器. 删除本地时间并设置时区为上海 rm -rf /etc/...
  • 第一,sh放入profile方式 linux 精确记录用户IP以及用户操作命令 主要功能: 可以记录哪个ip和时间(精确到秒)作了哪些命令 通过用户登录时候,重新定义HISTFILE HISTFILE文件名包含登录用户名,ip,登录...
  • 软件有BUG是难免,如何记录软件错误,方便查找问题,又不致于把客户弄晕呢? 有时候你打电话问客户,他们只会说操作什么什么,然后就有问题,没有更多细节告诉你,全靠你直觉发现问题。 有个方案,一直...
  • C/C++中计算函数运行时间的两种方法

    万次阅读 多人点赞 2017-11-04 23:30:11
    方法就是在该段代码或者函数前面,记录一个时间T1,在代码段或函数后面记录时间T2,那其运行时间就是T2-T1,下面看看具体运算方法方法一:  clock()是C/C++中计时函数,而与其相关数据类型是clock_t; ...
  • 不算两种方法 就是一种使用变量写配置 然后打包jar到服务器运行 另一种加载xml配置文件 使用idea本地运行 贴代码 /** * 作者:Shishuai * 文件名:HBase2HDFS * 时间:2019/8/17 16:00 */ package com.qf.mr;...
  • MySQL查询时间的两种方法

    千次阅读 2014-01-16 12:54:45
    MySQL的时间字段有date、time、datetime、...无论怎么存储,在实际应用中,很可能会出现包含“时间段”类型查询,比如一个访问记录数据库,需要统计每天访问数量,这个每天就是一个时间段。下面介绍MySQL查询时间
  • 删除远程桌面记录的两种方式介绍

    千次阅读 2019-01-17 17:05:01
    为了节省时间和方便,现在很多人都...下面是我总结的个删除记录的方法,利用这个方法我们可以彻底地删除掉那些没有用的记录了。 具体方法: 一、方法1(修改注册表):  1、我们点击桌面的开始菜单,点击运行;...
  • C++ 记录程序运行时间的方法总结

    千次阅读 2017-04-03 09:26:49
    在学习过程中很重要一个必会小技巧:计算某一段代码执行时间,可以用来分析代码效率和算法的时间复杂度等等(个人主要是在总结各种排序算法时遇到这个方法),下面给出两种常用方式: 第一种:使用...
  • mysql 正确清理binlog日志的两种方法

    千次阅读 2018-04-10 15:06:07
    ###前言:MySQL中的binlog日志记录了数据库中数据的变动,便于对数据的基于时间点和基于位置的恢复,但是binlog也会日渐增大,占用很大的磁盘空间,因此,要对binlog使用正确安全的方法清理掉一部分没用的日志。...
  • 今天在用Python跑一个数据时,需要遍历一个日期范围,于是在网上找到如下可用代码,记录一下。方法1:import datetimedef main():begin = datetime.date(2014,6,1)end = datetime.date(2014,6,7)for i in range(...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,623
精华内容 649
关键字:

两种记录时间的方法