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

第二次运行np.empty

夏嘉德
2023-03-14
问题内容

在Scipy文件中写道:

函数零将创建一个由零组成的数组,函数一个将创建由零组成的数组,函数空将创建一个数组,其初始内容是随机的,并取决于内存的状态。默认情况下,创建的数组的dtype为float64。

所以我运行了这段代码

import numpy as np
np.empty((1,2))

返回:

array([[  6.92892901e-310,   8.42664136e-317]])

因此,它返回一个随机数,并且一切都很好。

但是,当我第二次运行该代码(在该shell中)时,它返回一个零数组!

np.empty((1,2))
array([[ 0.,  0.]])

问题是,为什么第二次返回零数组(而不是随机数)?


问题答案:

它不是随机的,它取决于计算机NumPy为数组请求一些空间时所提供的内存字节数。如果那里不是零,则将使用请求的dtype进行解释(看似随机,但更好的单词是不可预测的)。

在您的示例中,您没有保存第一个阵列,因此立即重用了第一个阵列的内存。

>>> import numpy as np
>>> print(id(np.empty((20))))
2545385324992
>>> print(id(np.empty((20))))
2545385324992

现在出现了令人惊讶的部分:似乎Python(或NumPy或您的OS)将内存归零,然后 再次将 其提供给NumPy 。

如果您创建的数组比其他数组大,那么它将不会是“零”,因为它是从其他地方获取的:

>>> print(np.empty((1, 2)))
[[  1.25757479e-311   1.25757479e-311]]
>>> print(np.empty((1, 3)))
[[  4.94065646e-324   9.88131292e-324   1.25757705e-311]]


 类似资料:
  • 当我第二次运行MacBook Pro时(在Eclipse和直接从命令行运行),以下内容完全冻结了我的MacBook Pro。第一次显示图形用户界面,应用程序按预期运行,但当我停止并重新运行它时,它会完全冻结计算机。 有人知道吗?我认为解决方案可能是–launcher的某种组合。secondThread,-XstartOnFirstThread,-XstartOnSecondThread类似于在Ma

  • 问题内容: 储存程序 在此存储过程中,我有两个update语句。如果第一次更新成功执行,然后第二次执行。需要进行哪些更改? 问题答案: 在第一个之后,您可以检查受影响的行数。 如果返回的结果是所需的更新数量(可能> 0),则仅触发第二个。 可以通过检查受影响的行数来包围第二个。

  • 一片代码往往在第一次运行时比重复运行消耗更多的时间。 原因见下: 1. 从 RAM 读入代码到cache花去了比运行它更多的时间。 2. 代码操作的所有数据都必须加载到cache, 这比执行那些操作更花时间。 当代码重复运行的时候, 数据几乎都在 cache 里。 3. 跳转指令在第一次运行的时候并不在分支目的缓存(branch target buffer,简称BTB)里, 因此一般都不能正确的预

  • 在插入新记录之前,我正在验证记录的存在性。但是,代码不会跳入insert块。在Reader.Close之后跳转到finally block 我怀疑我一定是做错了什么,因为没有例外,而且每次RecordsInfacted=-1

  • 问题内容: 我有Thrad和Handler: 当应用启动时,第一次使用 thread.start(); 一切正常。但是当我尝试启动 thread.start(); 从按钮第二次我有: E / MessageQueue-JNI:java.lang.IllegalThreadStateException:线程已启动。 问题答案: 您应该在启动之前检查该线程的状态。

  • 问题内容: 我在oracle 10 B中运行查询具有数百万条记录,并且C上没有索引 第一次运行它大约需要30秒,第二次运行查询大约需要1秒。 显然,它正在缓存某些内容,并且我希望它停止该操作,每次我运行查询时我都希望它花费30秒-就像它第一次运行一样。 为了使问题易于阅读,我过分简化了我所遇到的问题。 谢谢 问题答案: 清除缓存以衡量性能是可能的,但是非常麻烦。 跟踪已达到的调优性能的一个很好的方