当前位置: 首页 > news >正文

北京网站ui设计公司快速装修

北京网站ui设计公司,快速装修,腾讯微信小程序公众号,视频网站做电商简洁版本#xff1a; 之所以不同,是因为在调用平均操作时,pandas会使用瓶颈(如果已安装),而不是仅仅依赖于numpy.据推测,瓶颈似乎比numpy更快(至少在我的机器上),但代价是精确度.它们碰巧匹配64位版本,但32位不同(这是有趣的部分). 长版#xff1a; 通过检查这些模块的源代码…简洁版本 之所以不同,是因为在调用平均操作时,pandas会使用瓶颈(如果已安装),而不是仅仅依赖于numpy.据推测,瓶颈似乎比numpy更快(至少在我的机器上),但代价是精确度.它们碰巧匹配64位版本,但32位不同(这是有趣的部分). 长版 通过检查这些模块的源代码来判断发生了什么是非常困难的(它们非常复杂,即使是像平均值这样的简单计算,也很难说数值计算很难).最好使用调试器来避免大脑编译和那些类型的错误.调试器不会在逻辑上出错,它会告诉你究竟发生了什么. 这是我的一些堆栈跟踪(由于没有RNG的种子,值略有不同) 可以重现(Windows)import numpy as np; import pandas as pdxnp.random.normal(-9.,.005,size900000)dfpd.DataFrame(x,dtypefloat32,columns[x])df[x].mean() -9.0x.mean() -9.0000037501099754x.astype(np.float32).mean() -9.0000029 numpy的版本没什么特别的.这是熊猫版本有点古怪. 让我们来看看df [‘x’].mean()def test_it_2(): ... import pdb; pdb.set_trace() ... df[x].mean()test_it_2() ... # Some stepping/poking around that isnt important (Pdb) l 2307 2308 if we have an ndarray as a value, then simply perform the operation, 2309 otherwise delegate to the object 2310 2311 2312 - delegate self._values 2313 if isinstance(delegate, np.ndarray): 2314 # Validate that axis is consistent with Seriess single axis. 2315 self._get_axis_number(axis) 2316 if numeric_only: 2317 raise NotImplementedError(Series.{0} does not implement (Pdb) delegate.dtype dtype(float32) (Pdb) l 2315 self._get_axis_number(axis) 2316 if numeric_only: 2317 raise NotImplementedError(Series.{0} does not implement 2318 numeric_only..format(name)) 2319 with np.errstate(allignore): 2320 - return op(delegate, skipnaskipna, **kwds) 2321 2322 return delegate._reduce(opop, namename, axisaxis, skipnaskipna, 2323 numeric_onlynumeric_only, 2324 filter_typefilter_type, **kwds) 所以我们找到了麻烦点,但现在事情变得有些奇怪了 (Pdb) op(Pdb) op(delegate) -9.0 (Pdb) delegate_64 delegate.astype(np.float64) (Pdb) op(delegate_64) -9.000003749978807 (Pdb) delegate.mean() -9.0000029 (Pdb) delegate_64.mean() -9.0000037499788075 (Pdb) np.nanmean(delegate, dtypenp.float64) -9.0000037499788075 (Pdb) np.nanmean(delegate, dtypenp.float32) -9.0000029 请注意,delegate.mean()和np.nanmean输出-9.0000029类型为float32,而不是-9.0作为pandas nanmean.稍微探讨一下,你可以在pandas.core.nanops中找到pandas nanmean的来源.有趣的是,它实际上似乎应该首先匹配numpy.我们来看看pandas nanmean (Pdb) import inspect (Pdb) src inspect.getsource(op).split(\n) (Pdb) for line in src: print(line) disallow(M8) bottleneck_switch() def nanmean(values, axisNone, skipnaTrue): values, mask, dtype, dtype_max _get_values(values, skipna, 0) dtype_sum dtype_max dtype_count np.float64 if is_integer_dtype(dtype) or is_timedelta64_dtype(dtype): dtype_sum np.float64 elif is_float_dtype(dtype): dtype_sum dtype dtype_count dtype count _get_counts(mask, axis, dtypedtype_count) the_sum _ensure_numeric(values.sum(axis, dtypedtype_sum)) if axis is not None and getattr(the_sum, ndim, False): the_mean the_sum / count ct_mask count 0 if ct_mask.any(): the_mean[ct_mask] np.nan else: the_mean the_sum / count if count 0 else np.nan return _wrap_results(the_mean, dtype) 这是bottleneck_switch装饰器的(短)版本 import bottleneck as bn ... class bottleneck_switch(object): def __init__(self, **kwargs): self.kwargs kwargs def __call__(self, alt): bn_name alt.__name__ try: bn_func getattr(bn, bn_name) except (AttributeError, NameError): # pragma: no cover bn_func None ... if (_USE_BOTTLENECK and skipna and _bn_ok_dtype(values.dtype, bn_name)): result bn_func(values, axisaxis, **kwds) 用alt作为pandas nanmean函数调用它,所以bn_name是’nanmean’,这是从瓶颈模块中获取的attr (Pdb) l 93 result np.empty(result_shape) 94 result.fill(0) 95 return result 96 97 if (_USE_BOTTLENECK and skipna and 98 - _bn_ok_dtype(values.dtype, bn_name)): 99 result bn_func(values, axisaxis, **kwds) 100 101 # prefer to treat inf/-inf as NA, but must compute the fun 102 # twice :( 103 if _has_infs(result): (Pdb) nd:\anaconda3\lib\site-packages\pandas\core\nanops.py(99)f() - result bn_func(values, axisaxis, **kwds) (Pdb) alt(Pdb) alt.__name__ nanmean (Pdb) bn_func(Pdb) bn_name nanmean (Pdb) bn_func(values, axisaxis, **kwds) -9.0 假装bottleneck_switch()装饰器暂时不存在.我们实际上可以看到调用手动单步执行此函数(没有瓶颈)将获得与numpy相同的结果 (Pdb) from pandas.core.nanops import _get_counts (Pdb) from pandas.core.nanops import _get_values (Pdb) from pandas.core.nanops import _ensure_numeric (Pdb) values, mask, dtype, dtype_max _get_values(delegate, skipnaskipna) (Pdb) count _get_counts(mask, axisNone, dtypedtype) (Pdb) count 900000.0 (Pdb) values.sum(axisNone, dtypedtype) / count -9.0000029 但是,如果你已经安装了瓶颈,那就永远不会被调用.相反,bottleneck_switch()装饰器反而突破了nanmean函数和瓶颈版本.这就是差异所在(有趣的是它在float64的情况下是匹配的) (Pdb) import bottleneck as bn (Pdb) bn.nanmean(delegate) -9.0 (Pdb) bn.nanmean(delegate.astype(np.float64)) -9.000003749978807 据我所知,瓶颈仅用于速度.我假设他们正在使用他们的nanmean函数采用某种类型的快捷方式,但我没有对它进行过多考察(有关此主题的详细信息,请参阅 ead的答案).您可以看到它的基准测试通常比numpy快一点https://github.com/kwgoodman/bottleneck.显然,为这个速度付出的代价是精确的. 瓶颈实际上更快吗 当然看起来像(至少在我的机器上). In [1]: import numpy as np; import pandas as pd In [2]: xnp.random.normal(-9.8,.05,size900000) In [3]: y_32 x.astype(np.float32) In [13]: %timeit np.nanmean(y_32) 100 loops, best of 3: 5.72 ms per loop In [14]: %timeit bn.nanmean(y_32) 1000 loops, best of 3: 854 ?s per loop 对于pandas来说,在这里引入一个标志可能会很好(一个用于速度,另一个用于更好的精度,默认用于速度,因为那是当前的impl).一些用户更关心计算的准确性而不是它发生的速度. HTH.
http://www.huolong8.cn/news/290722/

相关文章:

  • 做网站开发人员架构有没有免费的推广网站
  • 魅姬直播西安seo优化顾问
  • 建网站推广江苏省建设工程竣工验收网站
  • 学习做网站东莞营销网站
  • 如何建设简单小型网站wordpress 离线编辑
  • .net wap网站模板揭阳网站开发
  • 哪个网站做美食视频沈阳网络运营推广
  • 专业网站建站公司北京比较好的网站建设公司
  • 电子商务网站多少钱微信扫二维码网页空白
  • 珠海哪个公司建设网站好如何免费制作二维码
  • 龙岗免费的网站制作重庆代还信用卡网站建设
  • 盐城网站建设制作网站关闭备案
  • 备案的网站做跳转不影响备案把邢台网站制作报价多少钱
  • 网页设计网站模板素材有风险的网站
  • 自己办网站红豆网梧州论坛
  • 一级域名跳转到二级域名广州网站建设方案优化
  • 免费模板网站知乎专业的单位网站建设
  • 自主网站建站网站建设公司好吗
  • 外网访问不了内网建设的网站网站建设框架编写目的
  • 阿里云零基础网站建设教学如何建立学校网站
  • 做网站要学的知识卖东西的平台有哪些
  • php做的网站源代码在哪里wordpress网页教程百度云
  • 开源网站 做镜像 如何做做网站去哪找客户
  • 企业网站建设要多批量管理多个wordpress
  • 网站软件设计python做网站难么
  • 淮北网站建设制作微信公众号开发流程图
  • 北控水务建设发展有限公司网站企业所得税公式计算例子
  • 网站框架一般用什么做设计图片素材
  • 青岛网站开发设计海豚一键做淘宝网站
  • 做网站编辑做ic贸易去什么网站好