python中np没有定义_python中的np.empty_python – np.empty,np.zeros和np.one
我很好奇它使用
np.empty而不是
np.zeros实际上有多大差异,还有关于
np.ones的差异.我运行这个小脚本来测试每个创建一个大型数组所需的时间:
import numpy as np
from timeit import timeit
N = 10_000_000
dtypes = [np.int8, np.int16, np.int32, np.int64,
np.uint8, np.uint16, np.uint32, np.uint64,
np.float16, np.float32, np.float64]
rep= 100
print(f'{"DType":8s} {"Empty":>10s} {"Zeros":>10s} {"Ones":>10s}')
for dtype in dtypes:
name = dtype.__name__
time_empty = timeit(lambda: np.empty(N, dtype=dtype), number=rep) / rep
time_zeros = timeit(lambda: np.zeros(N, dtype=dtype), number=rep) / rep
time_ones = timeit(lambda: np.ones(N, dtype=dtype), number=rep) / rep
print(f'{name:8s} {time_empty:10.2e} {time_zeros:10.2e} {time_ones:10.2e}')
并获得下表:
DType Empty Zeros Ones
int8 1.39e-04 1.76e-04 5.27e-03
int16 3.72e-04 3.59e-04 1.09e-02
int32 5.85e-04 5.81e-04 2.16e-02
int64 1.28e-03 1.13e-03 3.98e-02
uint8 1.66e-04 1.62e-04 5.22e-03
uint16 2.79e-04 2.82e-04 9.49e-03
uint32 5.65e-04 5.20e-04 1.99e-02
uint64 1.16e-03 1.24e-03 4.18e-02
float16 3.21e-04 2.95e-04 1.06e-02
float32 6.31e-04 6.06e-04 2.32e-02
float64 1.18e-03 1.16e-03 4.85e-02
从中我提取了两个有些令人惊讶的结论:
> np.empty和np.zeros的性能几乎没有区别,可能除了int8的一些差异.我不明白为什么会这样.创建一个空数组应该更快,实际上我已经看到了这个的报告(例如Speed of np.empty vs np.zeros).
> np.zeros和np.ones之间有很大的不同.我怀疑这与内存归零的高性能方法有关,不适用于用常量填充内存区域,但我真的不知道如何或在什么级别这样可行.
这些结果的解释是什么?
我在Windows 10(使用MKL)上使用NumPy 1.15.4和Python 3.6 Anaconda,我有一个Intel Core i7-7700K CPU.
编辑:根据评论中的建议,我尝试运行基准交错每个单独的试验和最后的平均,但我看不出结果的显着差异.但是,在相关的说明中,我不知道NumPy中是否有任何机制可以重用刚刚删除的数组的内存,这会使这些措施变得不切实际(尽管时间似乎与数据类型大小相关)对于空数组).
最佳答案 这应该是一个评论,但它不适合.这是脚本的一个小扩展.有一些“手工制作”的零和一个版本.
import numpy as np
from timeit import timeit
N = 10_000_000
dtypes = [np.int8, np.int16, np.int32, np.int64,
np.uint8, np.uint16, np.uint32, np.uint64,
np.float16, np.float32, np.float64]
rep= 100
print(f'{"DType":8s} {"Empty":>10s} {"Zeros":>10s} {"Ones":>10s}')
for dtype in dtypes:
name = dtype.__name__
time_empty = timeit(lambda: np.empty(N, dtype=dtype), number=rep) / rep
time_zeros = timeit(lambda: np.zeros(N, dtype=dtype), number=rep) / rep
time_ones = timeit(lambda: np.ones(N, dtype=dtype), number=rep) / rep
time_full_zeros = timeit(lambda: np.full(N, 0, dtype=dtype), number=rep) / rep
time_full_ones = timeit(lambda: np.full(N, 1, dtype=dtype), number=rep) / rep
time_empty_zeros = timeit(lambda: np.copyto(np.empty(N, dtype=dtype), 0), number=rep) / rep
time_empty_ones = timeit(lambda: np.copyto(np.empty(N, dtype=dtype), 1), number=rep) / rep
print(f'{name:8s} {time_empty:10.2e} {time_zeros:10.2e} {time_ones:10.2e} {time_full_zeros:10.2e} {time_full_ones:10.2e} {time_empty_zeros:10.2e} {time_empty_ones:10.2e} ')
时间是暗示性的.
DType Empty Zeros Ones
int8 1.37e-06 6.33e-04 5.73e-04 5.76e-04 5.73e-04 6.05e-04 5.82e-04
int16 1.61e-06 1.55e-03 3.54e-03 3.54e-03 3.56e-03 3.54e-03 3.54e-03
int32 7.22e-06 6.99e-06 1.24e-02 1.20e-02 1.25e-02 1.19e-02 1.21e-02
int64 8.26e-06 8.06e-06 2.62e-02 2.64e-02 2.61e-02 2.62e-02 2.62e-02
uint8 1.32e-06 6.30e-04 5.85e-04 5.86e-04 5.77e-04 5.70e-04 5.83e-04
uint16 1.32e-06 1.63e-03 3.61e-03 3.65e-03 4.08e-03 4.08e-03 3.58e-03
uint32 7.08e-06 7.20e-06 1.48e-02 1.41e-02 1.63e-02 1.44e-02 1.32e-02
uint64 7.14e-06 7.13e-06 2.69e-02 2.67e-02 2.82e-02 2.68e-02 2.72e-02
float16 1.31e-06 1.55e-03 3.56e-03 3.79e-03 3.54e-03 3.53e-03 3.55e-03
float32 7.11e-06 6.95e-06 1.36e-02 1.35e-02 1.37e-02 1.35e-02 1.37e-02
float64 7.27e-06 7.33e-06 3.13e-02 3.00e-02 2.75e-02 2.80e-02 2.75e-02
重新零比我似乎记得的更快,正如评论中所建议的那样,零确实使用了calloc,它是一个系统例程,其唯一目的是分配零块,这可能是很好的.
python中np没有定义_python中的np.empty_python – np.empty,np.zeros和np.one相关推荐
- python中对象的定义_python中对象的定义和使用
python中对象的定义和使用 发布时间:2020-06-22 11:57:16 来源:亿速云 阅读:98 作者:Leah 今天就跟大家聊聊有关python中对象的定义和使用,可能很多人都不太了解,为 ...
- python私有属性怎么定义_Python中私有属性的定义方式
Python没有类似于Java的private关键字, 但也可以为类定义私有属性. 只需将属性命名变为以__开头, 例如 __field. 示例代码: class Vector2D(object): ...
- python中变量怎么定义_python中的变量的使用定义以及使用规则
本篇包括14章内容,系统介绍了Python语言的基础知识.内容包括Python基础语法.数据类型和类型转换.运算符.流程控制(分支结构循环结构).数据结构(列表生成式).函数的定义及使用.异常处理.迭 ...
- python私有属性怎么定义_Python中定义私有属性的方法是()。
[判断题]请假条带有请求的性质,所以一般来说篇幅要尽量长一些,以示郑重;更多要用煽情性语句,以打动对方.( ) [单选题]关于类和对象的关系,下列描述正确的是(). [选择]Трудоспособны ...
- python中name没有定义_python中__name__的使用
这几天开始学习Python,遇到一些问题,也解决了一些问题. 其中if __name__ == '__main__':这句估计很多和我一样的初学者都是不求甚解.这里作一下解释: 1:__name__是 ...
- python工具用什么语言_Python中一些自然语言工具的使用的入门教程
NLTK 是使用 Python 教学以及实践计算语言学的极好工具.此外,计算语言学与人工 智能.语言/专门语言识别.翻译以及语法检查等领域关系密切. NLTK 包括什么 NLTK 会被自然地看作是具有 ...
- python基于训练集预测_Python中训练集/测试集的分割和交叉验证
原标题:Python中训练集/测试集的分割和交叉验证 嗨,大家好!在上一篇关于Python线性回归的文章之后,我认为撰写关于切分训练集/测试集和交叉验证的文章是很自然的,和往常一样,我将对该主题进行简 ...
- python find的使用方法_Python中的rfind()方法使用详解
Python中的rfind()方法使用详解 rfind()方法返回所在子str 被找到的最后一个索引,或者-1,如果没有这样的索引不存在,可选择限制搜索字符串string[beg:end]. 语法 以 ...
- python中array的用法_Python中的numpy.array()用法
齐次多维数组是NumPy的主要对象.它基本上是一个元素表, 这些元素都是相同类型的, 并由一个正整数元组索引.尺寸在NumPy中称为轴. NumPy的数组类称为ndarray或别名数组. numpy. ...
最新文章
- k均值聚类图像分割matlab代码_用K均值聚类法为人类拍摄的首张黑洞照片进行分割...
- IQKeyboardManager使用方法
- android 53 ContentProvider内容提供者
- 《Spark大数据分析:核心概念、技术及实践》大数据技术一览
- 【 MATLAB 】通过不同样本数的同一个有限长序列作 DTFT 对比
- mysql 多实例应用配置部署指南
- Spring定时任务注解@Scheduled+@EnableAsync用法详解(简单说明+应用场景+demo源代码+执行过程分析)
- Ubuntu Server搭建FTP服务器(2) --本地用户FTP服务器架设
- Linux系统:centos7下安装Jdk8、Tomcat8、MySQL5.7环境
- 无向图的邻接表表示法 及 深搜遍历DFS
- Android异常总结---1.Android java.net.SocketException: Address family not supported by protocol
- 利用NSFileManager获取文件(文件夹)列表
- html微信朋友圈demo,Vue.js实现模拟微信朋友圈开发demo
- 揭晓eval(function(p,a,c,k,e,r)js代码解密加密程序
- opencv 白平衡之灰度世界算法
- 少儿编程网站源码和scratch课程
- IC验证之测试点分解
- JavaWeb_04_MySQL多表事务
- 一款开源且具有交互视图界面的实时 Web 日志分析工具
- 有关路基和隧道的CASIO 5800P 万能曲线 计算程序
热门文章
- 茶百科 android 论文,基于android平台手机茶百科开发_学位论文.doc
- php 代码符号,网站开发编程中的特殊符号处理_php
- 校招萌新在阿里妈妈是如何成长的
- numpy 最大值_使用 NumPy 让你的 Python 科学计算更高效
- 高中生计算机专业的研究论文,高中计算机个性化教学模式研究的论文
- windows Perl环境安装与Hello World
- 使左对角线和右对角线上的元素为0
- 鸿蒙概念爆发,叶子看盘:华为鸿蒙概念爆发,这两只龙头已启动!
- 【图像超分辨率】SR for RS via Local–Global Combined Network
- 数组输出黑科技----fwrite()