当前位置: 首页 > 面试题库 >

在Numpy中执行零功能

微生季
2023-03-14
问题内容

我只是注意到的zeros功能numpy有一个奇怪的行为:

%timeit np.zeros((1000, 1000))
1.06 ms ± 29.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit np.zeros((5000, 5000))
4 µs ± 66 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

另一方面,ones似乎有正常的行为。有人知道为什么用该zeros函数初始化一个小的numpy数组比一个大的数组要花更多的时间吗?

(Python 3.5,numpy 1.11)


问题答案:

看起来好像calloc达到了一个阈值,在该阈值下,操作系统会要求将内存清零,而无需手动对其进行初始化。查看源代码,numpy.zeros最终委托来calloc获取清零的内存块,如果与进行比较numpy.empty,则不执行初始化:

In [15]: %timeit np.zeros((5000, 5000))
The slowest run took 12.65 times longer than the fastest. This could mean that a
n intermediate result is being cached.
100000 loops, best of 3: 10 µs per loop

In [16]: %timeit np.empty((5000, 5000))
The slowest run took 5.05 times longer than the fastest. This could mean that an
 intermediate result is being cached.
100000 loops, best of 3: 10.3 µs per loop

您会看到np.zeros5000x5000阵列没有初始化开销。

实际上,在您尝试访问该内存之前,该操作系统甚至没有“真正”分配该内存。在无数TB可用空间的机器上,对TB级阵列的请求成功完成:

In [23]: x = np.zeros(2**40)  # No MemoryError!


 类似资料:
  • 问题内容: 我是android开发的新手,现在我的启动器活动仅显示5秒钟,之后我要检查用户是否已登录并无法正常工作并执行操作。 这是我的代码。 问题答案: 您可以使用Handler来添加一些延迟。按如下所示调用方法,使其在5秒钟后执行。 注意: 请勿使用那样的线程, 因为它将阻塞您的UI并使其无响应。

  • 我的查询如下: 我得到一个错误“意外的'*'”。在第6行,请让我知道,如何重写或更正这个问题 谢谢,去吧

  • 问题内容: 我有以下数组 我想找到连续为零的数组的开始和结束索引,输出上方的数组如下所示 我想做得尽可能高效。 问题答案: 这是一个相当紧凑的矢量化实现。我已经更改了一些要求,所以返回值有点“ numpythonic”:它创建一个形状为(m,2)的数组,其中m是零的“游程”数。第一列是每次运行中前0个的索引,第二列是运行后第一个非零元素的索引。(例如,此索引模式匹配切片的工作方式以及函数的工作方式

  • 问题内容: 我想制作一个使用ReLU函数的简单神经网络。有人可以告诉我如何使用numpy实现该功能的线索。 问题答案: 有两种方法。 如果使用以下代码计时结果: 我们得到: 因此乘法似乎是最快的。

  • 根据定义,行列式为零的方阵不应可逆。然而,出于某种原因,在生成协方差矩阵后,我成功地对其求逆,但求协方差矩阵的行列式的结果是输出为0.0。 可能会出现什么问题?我应该不信任行列式输出,还是应该不信任逆协方差矩阵?或者两者都有? 我的代码片段:

  • 问题内容: 情况: 我正在AngularJs中制作一个分配权限的应用程序。为了做到这一点,我有三个嵌套的ng-repeat。 第一循环 :显示PERMISSION GROUP 第二个循环 :对于每个权限组,显示“类别”。在此循环内执行一个函数,该函数将获取每个类别的所有子类别 第三循环 :显示子类别 问题: 问题在于第二个循环内函数的执行。 尝试1-ng-init: 在控制器中: 行为很奇怪。可能