NumPy 提供了两种基本的对象,即 ndarray 和 ufunc 对象。前面几节已经介绍了 ndarray,本节将介绍 Numpy。ufunc 是 universal function 的缩写,意思是“通用函数”,它是一种能对数组的每个元素进行操作的函数。

许多 ufunc 函数都是用C语言级别实现的,因此它们的计算速度非常快。

此外,ufun 比 math 模块中的函数更灵活。math 模块的输入一般是标量,但 NumPy 中的函数可以是向量或矩阵,而利用向量或矩阵可以避免使用循环语句,这点在机器学习、深度学习中非常重要。

表1:NumPy 中的几个常用通用函数

函数

使用方法

sqrt()

计算序列化数据的平方根

sin()、cos()

三角函数

abs()

计算序列化数据的绝对值

dot()

矩阵运算

log()、logl()、log2()

对数函数

exp()

指数函数

cumsum()、cumproduct()

累计求和、求积

sum()

对一个序列化数据进行求和

mean()

计算均值

median()

计算中位数

std()

计算标准差

var()

计算方差

corrcoef()

计算相关系数

math 与 numpy 函数的性能比较

请看下面的代码:

import time

import math

import numpy as np

x = [i * 0.001 for i in np.arange(1000000)]

start = time.clock()

for i, t in enumerate(x):

x[i] = math.sin(t)

print ("math.sin:", time.clock() - start )

x = [i * 0.001 for i in np.arange(1000000)]

x = np.array(x)

start = time.clock()

np.sin(x)

print ("numpy.sin:", time.clock() - start )

打印结果:

math.sin: 0.5169950000000005

numpy.sin: 0.05381199999999886

由此可见,numpy.sin 比 math.sin 快近 10 倍。

循环与向量运算比较

充分使用 Python 的 NumPy 库中的内建函数(Built-in Function),来实现计算的向量化,可大大地提高运行速度。NumPy 库中的内建函数使用了 SIMD 指令。如下使用的向量化要比使用循环计算速度快得多。如果使用 GPU,其性能将更强大,不过 Numpy 不支持 GPU。

请看下面的代码:

import time

import numpy as np

x1 = np.random.rand(1000000)

x2 = np.random.rand(1000000)

##使用循环计算向量点积

tic = time.process_time()

dot = 0

for i in range(len(x1)):

dot+= x1[i]*x2[i]

toc = time.process_time()

print ("dot = " + str(dot) + "\n for loop----- Computation time = " + str(1000*(toc - tic)) + "ms")

##使用numpy函数求点积

tic = time.process_time()

dot = 0

dot = np.dot(x1,x2)

toc = time.process_time()

print ("dot = " + str(dot) + "\n verctor version---- Computation time = " + str(1000*(toc - tic)) + "ms")

输出结果:

dot = 250215.601995

for loop----- Computation time = 798.3389819999998ms

dot = 250215.601995

verctor version---- Computation time = 1.885051999999554ms

从运行结果上来看,使用 for 循环的运行时间大约是向量运算的 400 倍。因此,在深度学习算法中,一般都使用向量化矩阵进行运算。

python中的numpy函数算相关系数_NumPy ufunc通用函数相关推荐

  1. python中的numpy函数算相关系数_扩展库numpy的函数corrcoef()用来计算相关系数矩阵。...

    [判断题]不同的考试对于词汇能力提出不同的要求.考试水平越高,对学生词汇能力的要求越高. [单选题]利率互换交易的现金流错配风险是指( ) [多选题]石墨可以用来制作铅笔芯,是利用了其 ( )性质. ...

  2. Python 中的Numpy函数

    文章目录 一.什么是Numpy 1.1 ndarray 构建ndarray 1.2 数据类型 Numpy 的矢量化(向量化)功能 二.创建常用的数组 2.1 创建一个全0数组 2.2 全1数组 2.3 ...

  3. [转载] python中的numpy模块和pandas模块的区别_numpy 模块和 pandas 模块

    参考链接: Python中的numpy.radians和deg2rad 一.numpy模块 1.1 numpy 简介 numpy是python的一种开源的数值计算扩展库,这种库可用来存储和处理大型nu ...

  4. python numpy sum函数_如何使用Python中的sum函数?

    之前小编向大家介绍过python中的sum函数(https://www.py.cn/jishu/jichu/22025.html).在python中sunm函数使用分为两种情况,一种是python自带 ...

  5. python中append函数解析_对python中的pop函数和append函数详解

    对python中的pop函数和append函数详解 pop()函数 1.描述 pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值. 语法 pop()方法语法: list. ...

  6. python中add函数_如何使用python中的add函数?

    之前向大家介绍过python中的求和函数sum函数,numpy中的sum函数,对于数组可以指定维度进行相加.numpy中还有另一种求和运算方法,即add函数.add函数不仅作用于numpy中加法运算, ...

  7. Python 中各种imread函数的区别与联系

    Python 中各种imread函数的区别与联系 最近一直在用python做图像处理相关的东西,被各种imread函数搞得很头疼,因此今天决定将这些imread总结一下,以免以后因此犯些愚蠢的错误.如 ...

  8. python中调用C++函数

    python中调用C++函数 无参调用 单变量传入与返回调用 numpy数组传入与返回调用 c++类调用 用python写不香吗?还这么复杂调用C++? 一. 无参调用 在python中调用无参数和无 ...

  9. [转载] Python中的numpy linalg模块

    参考链接: Python中的numpy.bmat 原文链接:https://www.cnblogs.com/xieshengsen/p/6836430.html # 线性代数 # numpy.lina ...

最新文章

  1. 只需三分钟您就可以用nodejs搭建静态网页服务器(配置静态网页访问目录)
  2. oracle中出现大量active,Oracle技术之大量会话出现resmgr:become active等待
  3. solr/lucence和关系数据库的混合使用
  4. webpack4.x安装的一些坑
  5. java 设置光标_java光标位置怎么设置 java设置光标位置方法
  6. HDU-2072 单词数 水题一枚
  7. linux 软链接_Linux软连接和硬链接
  8. 兮米安装包制作工具图文教程集锦电子书
  9. 2021年江苏专转本计算机知识点,2021年江苏专转本计算机考试复习知识点归纳内部资料.doc...
  10. 金蝶K3服务器安装及配置
  11. anaconda利用sns或plt画图中文乱码问题
  12. 【你可能不知道的】 PICkit3 脱机烧写 program to go 模式
  13. android设置个性桌面,打造小清新手机 安卓桌面 美化全教程
  14. 我在美团Android研发岗工作的那5年,终局之战
  15. Elixir元编程-第三章 编译时代码生成技术进阶
  16. Python中调用Linux命令之os.system、os.popen
  17. 计算机软考科目众多 我们该如何选择考试科目?
  18. Apache Jakarta 项目介绍
  19. 第十三讲 面向对象(下)——Seasons in the sun
  20. [Violet]蒲公英(分块)

热门文章

  1. 如何使用eclemma插件_如何集成和使用EclEmma插件来获得良好的Junit覆盖率
  2. java orm框架有哪些_Java Stream ORM现在带有JOIN
  3. jboss默认进程名称_快速指南:剖析JBoss BPM跨进程通信
  4. 使用var,Lombok和Fluxtion轻松处理事件
  5. jax-rs jax-ws_创建一个简单的JAX-RS MessageBodyWriter
  6. Java开发趋势:2019年展望
  7. 面向切面编程应用_应用面向方面的编程
  8. 正确的工作流程:我应该使用哪个OAuth 2.0流程?
  9. 用于在Synology NAS上测试Spring Boot Web应用程序的JUnit模拟文件
  10. static和瞬态_具有瞬态属性的视图对象的钝化和激活