Numpy 用line_profiler分析代码

安装好line_profiler后,就可以开始分析代码了。

具体步骤

显然,我们需要一些可供分析的代码。

  1. 编写可供分析的代码。

我们将编写一个脚本,用来计算一系列不同大小的包含随机数的矩阵的平方。同时要求对应的线程能休眠几秒钟。待分析的函数需要用@profile进行标记。

import numpy
import time

@profile
def multiply(n):
    A = numpy.random.rand(n, n)
    time.sleep(numpy.random.randint(0, 2))
    return numpy.matrix(A) ** 2

    for n in 2 ** numpy.arange(0, 10):
        multiply(n)

  1. 对代码进行分析。

使用line_profiler分析代码时,键入如下命令。

$ kernprof.py -l -v mat_mult.py
Wrote profile results to mat_mult.py.lprof
Timer unit: 1e-06 s

File: mat_mult.py
Function: multiply at line 4
Total time: 3.19654 s

Line # Hits    Time  Per Hit  % Time  Line Contents
    ==============================================================
    4                                @profile
    5                                def multiply(n):
    6   10   13461   1346.1     0.4  A = numpy.random.rand(n, n)
    7   10 3000689 300068.9    93.9  time.sleep(numpy.random.randint(0, 2))
    8   10  182386  18238.6     5.7  return numpy.matrix(A) ** 2

攻略小结

修饰符@profile的作用是告诉line_profile,哪个函数需要分析。下表对line_profile的输出项目进行了解释。

描述
Line # 脚本文件中的行号
Hits 单行代码的执行次数
Time 执行单行代码花费的总时间
Per Hit 单次执行某行代码的平均时间
% Time 执行单行代码花费的时间在所有行的总执行时间中占的百分比
Line Contents 单行代码的内容

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程