python中numpy zeros_为什么numpy.zeros和numpy.zeros的性能不同?
我在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的性能不同?相关推荐
- 2.python中的矩阵、多维数组----numpy
最近在将一个算法由matlab转成python,初学python,很多地方还不熟悉,总体感觉就是上手容易,实际上很优雅地用python还是蛮难的.目前为止,觉得就算法仿真研究而言,还是matlab用得 ...
- python中ndarray对象实例化_Python数据分析之Numpy学习 2——NumPy 基础 ndarray对象
Python数据分析之Numpy学习 2 -- NumPy 基础学习 NumPy(Numerical Python)是高性能科学计算和数据分析的基础包.NumPy的主要对象是同构数据多维容器(homo ...
- python中怎么表示lnx_python数据分析进阶之numpy
标签: 摘要 Numpy是利用python来进行数据分析中必须要掌握的基础.是高性能科学计算和数据分析的基础包.利用numpy能对整组数据无需循环就能进行快速的标准数学函数计算,同时能进行线性代数,随 ...
- python中r55的执行结果是_import numpy as np
[单选题]import pandas as pd 导入pandas库后,以下无法读取的数据类型是哪一个? [单选题]16-55. Windows中的剪贴板是一个特殊的存储区域,它位于 [单选题]imp ...
- python中average什么意思_在Python3 numpy中mean和average的区别详解
mean和average都是计算均值的函数,在不指定权重的时候average和mean是一样的.指定权重后,average可以计算一维的加权平均值. 具体如下: import numpy as np ...
- python中array是什么意思_Python库Numpy里ndarray.ndim 是什么意思?
刚学习numpy,对此查找了一下,给出下面的解释,希望能帮到题主. 1.ndim中的dim是英文dimension维度的缩写.numpy文档中对ndim的属性见下图解释. 因此对于一个数组,其shap ...
- python中复数的乘法_不一致的numpy复数乘法结果
首先,这并不是针对mp的内容,但是由于它是在评论中提出的: np.matrix可以接受一个字符串参数,并从中生成一个数值矩阵.还要注意形状是(1,1)In [145]: a = np.matrix(' ...
- python中grid函数_Python / NumPy中meshgrid的目的是什么?
实际上文档中已经提到了np.mgrid的目的: np.mgrid 从坐标向量返回坐标矩阵. 在给定一维坐标数组x1,x2,...,xn的情况下,为N-D网格上的N-D标量/矢量场的矢量化评估制作N-D ...
- Python中的数据可视化工具与方法——常用的数据分析包numpy、pandas、statistics的理解实现和可视化工具matplotlib的使用
Python中的数据可视化工具与方法 本文主要总结了: 1.本人在初学python时对常用的数据分析包numpy.pandas.statistics的学习理解以及简单的实例实现 2.可视化工具matp ...
- 怎么在python中输入矩阵_如何使用NumPy在Python中实现矩阵?
矩阵被用作数学工具,在现实世界中有多种用途.在本文中,我们将按照以下顺序讨论Python中关于使用著名的NumPy库的矩阵的所有内容:什么是NumPy以及何时使用它?在NumPy 矩阵被用作数学工具, ...
最新文章
- jsp的内置对象Exception
- mysql group by 报错 ,only_full_group_by 三种解决方案
- 全国计算机二级公共基础知识练习,2020年全国计算机二级公共基础知识练习题(7)...
- 90后,一个即将成为程序员的我
- 智能系统课件@丛爽老师-中国科学技术大学自动化系
- 用PDB库调试Python程序
- [中文事件抽取]DCFEE: A Document-level Chinese Financial Event Extraction System based on Automatically Lab
- python数据结构递归树_python数据结构(对称二叉树递归和迭代)
- github怎么隐藏自己的pr记录_在GitHub中向开源框架提交PR的过程
- 比较三个数,求最大数字 ( 应用条件运算符:?)
- 删除指定路径下的文件以及文件夹
- 抖音高贵气质的签名_笑言 | 非主流时期的QQ签名和杜蕾斯文案有的一拼。
- 485串口测试工具软件_【实例】如何用串口软件调试变频器?
- [ProblemSolving]ut下载磁盘负荷过重
- 云计算就业指南是什么 该如何做好自我介绍
- “十步杀一人,千里不留行。事了拂衣去,深藏功与名。”
- 英语单词在计算机中怎么存放,电脑怎么学英语单词
- 计算机内存运算太低,内存频率低对电脑性能有影响吗
- 易语言大漠圆形椭圆形渐开线结合鼠标特征码刷怪
- 什么是维度表和事实表