我在Ipython中的计时是(使用更简单的timeit接口):In [57]: timeit np.zeros_like(x)

1 loops, best of 3: 420 ms per loop

In [58]: timeit np.zeros((12488, 7588, 3), np.uint8)

100000 loops, best of 3: 15.1 µs per loop

当我使用IPython(np.zeros_like??)查看代码时,我看到:res = empty_like(a, dtype=dtype, order=order, subok=subok)

multiarray.copyto(res, 0, casting='unsafe')

而np.zeros是纯黑盒编译的代码。

empty的计时为:In [63]: timeit np.empty_like(x)

100000 loops, best of 3: 13.6 µs per loop

In [64]: timeit np.empty((12488, 7588, 3), np.uint8)

100000 loops, best of 3: 14.9 µs per loop

所以zeros_like中的额外时间是copy。

在我的测试中,赋值时间(x[]=1)的差异可以忽略不计。

我猜zeros、ones、empty都是早期编译的产物。empty_like是为了方便起见添加的,只需从输入中绘制形状和类型信息。zeros_like编写时更注重易于编程维护(重用empty_like),而不是速度。

np.ones和np.full也使用np.empty ... copyto序列,并显示类似的计时。

https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/ctors.c-用于zeros和empty的源。两者都调用PyArray_NewFromDescr_int,但一个最终使用npy_alloc_cache_zero,另一个使用npy_alloc_cache。

npy_alloc_cache在alloc.c调用alloc。npy_alloc_cache_zero调用npy_alloc_cache,然后是memset。alloc.c中的代码与线程选项进一步混淆。

但是,对于缓存和垃圾收集,我想知道calloc/memset区别是否适用。

这个带有memory_profile包的简单测试支持这样一种说法,即zeros和empty动态分配内存,而zeros_like预先分配所有内容:N = (1000, 1000)

M = (slice(None, 500, None), slice(500, None, None))

Line # Mem usage Increment Line Contents

================================================

2 17.699 MiB 0.000 MiB @profile

3 def test1(N, M):

4 17.699 MiB 0.000 MiB print(N, M)

5 17.699 MiB 0.000 MiB x = np.zeros(N) # no memory jump

6 17.699 MiB 0.000 MiB y = np.empty(N)

7 25.230 MiB 7.531 MiB z = np.zeros_like(x) # initial jump

8 29.098 MiB 3.867 MiB x[M] = 1 # jump on usage

9 32.965 MiB 3.867 MiB y[M] = 1

10 32.965 MiB 0.000 MiB z[M] = 1

11 32.965 MiB 0.000 MiB return x,y,z

python中numpy zeros_为什么numpy.zeros和numpy.zeros的性能不同?相关推荐

  1. 2.python中的矩阵、多维数组----numpy

    最近在将一个算法由matlab转成python,初学python,很多地方还不熟悉,总体感觉就是上手容易,实际上很优雅地用python还是蛮难的.目前为止,觉得就算法仿真研究而言,还是matlab用得 ...

  2. python中ndarray对象实例化_Python数据分析之Numpy学习 2——NumPy 基础 ndarray对象

    Python数据分析之Numpy学习 2 -- NumPy 基础学习 NumPy(Numerical Python)是高性能科学计算和数据分析的基础包.NumPy的主要对象是同构数据多维容器(homo ...

  3. python中怎么表示lnx_python数据分析进阶之numpy

    标签: 摘要 Numpy是利用python来进行数据分析中必须要掌握的基础.是高性能科学计算和数据分析的基础包.利用numpy能对整组数据无需循环就能进行快速的标准数学函数计算,同时能进行线性代数,随 ...

  4. python中r55的执行结果是_import numpy as np

    [单选题]import pandas as pd 导入pandas库后,以下无法读取的数据类型是哪一个? [单选题]16-55. Windows中的剪贴板是一个特殊的存储区域,它位于 [单选题]imp ...

  5. python中average什么意思_在Python3 numpy中mean和average的区别详解

    mean和average都是计算均值的函数,在不指定权重的时候average和mean是一样的.指定权重后,average可以计算一维的加权平均值. 具体如下: import numpy as np ...

  6. python中array是什么意思_Python库Numpy里ndarray.ndim 是什么意思?

    刚学习numpy,对此查找了一下,给出下面的解释,希望能帮到题主. 1.ndim中的dim是英文dimension维度的缩写.numpy文档中对ndim的属性见下图解释. 因此对于一个数组,其shap ...

  7. python中复数的乘法_不一致的numpy复数乘法结果

    首先,这并不是针对mp的内容,但是由于它是在评论中提出的: np.matrix可以接受一个字符串参数,并从中生成一个数值矩阵.还要注意形状是(1,1)In [145]: a = np.matrix(' ...

  8. python中grid函数_Python / NumPy中meshgrid的目的是什么?

    实际上文档中已经提到了np.mgrid的目的: np.mgrid 从坐标向量返回坐标矩阵. 在给定一维坐标数组x1,x2,...,xn的情况下,为N-D网格上的N-D标量/矢量场的矢量化评估制作N-D ...

  9. Python中的数据可视化工具与方法——常用的数据分析包numpy、pandas、statistics的理解实现和可视化工具matplotlib的使用

    Python中的数据可视化工具与方法 本文主要总结了: 1.本人在初学python时对常用的数据分析包numpy.pandas.statistics的学习理解以及简单的实例实现 2.可视化工具matp ...

  10. 怎么在python中输入矩阵_如何使用NumPy在Python中实现矩阵?

    矩阵被用作数学工具,在现实世界中有多种用途.在本文中,我们将按照以下顺序讨论Python中关于使用著名的NumPy库的矩阵的所有内容:什么是NumPy以及何时使用它?在NumPy 矩阵被用作数学工具, ...

最新文章

  1. jsp的内置对象Exception
  2. mysql group by 报错 ,only_full_group_by 三种解决方案
  3. 全国计算机二级公共基础知识练习,2020年全国计算机二级公共基础知识练习题(7)...
  4. 90后,一个即将成为程序员的我
  5. 智能系统课件@丛爽老师-中国科学技术大学自动化系
  6. 用PDB库调试Python程序
  7. [中文事件抽取]DCFEE: A Document-level Chinese Financial Event Extraction System based on Automatically Lab
  8. python数据结构递归树_python数据结构(对称二叉树递归和迭代)
  9. github怎么隐藏自己的pr记录_在GitHub中向开源框架提交PR的过程
  10. 比较三个数,求最大数字 ( 应用条件运算符:?)
  11. 删除指定路径下的文件以及文件夹
  12. 抖音高贵气质的签名_笑言 | 非主流时期的QQ签名和杜蕾斯文案有的一拼。
  13. 485串口测试工具软件_【实例】如何用串口软件调试变频器?
  14. [ProblemSolving]ut下载磁盘负荷过重
  15. 云计算就业指南是什么 该如何做好自我介绍
  16. “十步杀一人,千里不留行。事了拂衣去,深藏功与名。”
  17. 英语单词在计算机中怎么存放,电脑怎么学英语单词
  18. 计算机内存运算太低,内存频率低对电脑性能有影响吗
  19. 易语言大漠圆形椭圆形渐开线结合鼠标特征码刷怪
  20. 什么是维度表和事实表

热门文章

  1. python实现名片管理器
  2. 几篇很好的文章(介绍VB.NET类),不断增加中
  3. java中环境变量设置
  4. 数据库查找姓李的人_数据库基本查询方法等
  5. 【HTML实现弹幕滚动效果和文字动态发光特效代码】
  6. ARCore:从哪里冒出来的ARCore
  7. 并行分布式计算 并行机系统互联网络
  8. 记sqoop导入hive时的一次报错
  9. 加强计算机管理,浅谈如何加强高校计算机专业管理
  10. UTC时间与Beijing时间转换工具