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

为什么numpy.zeros占用很少的空间

吕学
2023-03-14
问题内容

我想知道为什么numpy.zeros占用这么小的空间?

x = numpy.zeros(200000000)

这不会占用任何内存,

x = numpy.repeat(0,200000000)

占用约1.5GB。numpy.zeros是否创建一个空指针数组?如果是这样,是否可以在cython中更改指针后将其设置为空?如果我使用:

x = numpy.zeros(200000000)
x[0:200000000] = 0.0

内存使用率上升。有没有办法更改一个值,然后将其更改回numpy.zeros的格式,最初是在python或cython中使用的?


问题答案:

您在使用Linux吗?Linux的内存分配是延迟的。malloccallocnumpy中的基础调用始终“成功”。在首次访问该内存之前,实际上没有分配任何内存。

zeros函数将使用calloc它在首次访问之前将所有分配的内存清零。因此,numpy无需将数组显式清零,因此将延迟初始化数组。而该repeat函数不能依赖于calloc初始化数组。相反,它必须使用malloc然后将重复项复制到数组中的所有元素(因此强制立即分配)。



 类似资料:
  • 问题内容: 我终于在代码中发现了性能瓶颈,但是对于原因是很困惑的。为了解决这个问题,我将所有对的调用都改为使用。但是为什么太慢了? 例如(注意在电话): 但是奇怪的是,写入使用创建的数组要慢于使用创建的数组: 我的猜测是使用一些CPU技巧,而不是实际写入内存来分配它。写入时可以即时完成。但这仍不能解释数组创建时间的巨大差异。 我正在使用当前的numpy版本运行Mac OS X Yosemite:

  • 我的问题作为标题,通过搜索得到了一些知识: > Linux具有共享内存如何测量应用程序或进程的实际内存使用情况? JVM将保留在Xms中设置的内存量,对于堆内存,-Xms JVM是什么意思? 下面是我在Ubuntu12.04(64bit)JDK 1.7.0_04上的测试运行。和顶部显示如下:

  • 只显示7-9个图像。 显示n个图像。 当我创建一个文件时,由于系统完全错误而导致写入错误。我试图创建符号链接。但是我不能搬动码头工人的东西。 删除/var/lib/docker/graph下的所有内容好吗?除了创建符号链接和扩展磁盘之外,还有什么其他可能性?我宁愿删除不必要的东西。

  • 为什么软件公司很少用python开发web?

  • 问题内容: 我已经设置了泊坞窗,并且使用了完全不同的块设备来存储泊坞窗的系统数据: 请注意, 使用的是完全不同的硬盘 问题是,当我继续下载docker映像并运行docker容器时,似乎另一个硬盘驱动器 也用完了。 我可以通过删除一些Docker映像来验证此问题。在我删除了一些docker映像之后, 现在有了一些额外的空间。 我想念什么吗? 我的泊坞窗版本: 问题答案: 这是devicemapper

  • 问题内容: 该方法: 可以等效地写成: 以我的经验,第二种形式更常见,尤其是在更复杂的方法(可能存在多个此类出口点)中,“掷”和“返回”也是如此。然而,第一种形式可以使代码的条件结构更加明确。有没有什么理由比另一个更喜欢? 问题答案: 以我的经验,这取决于代码。如果我“防备”某些事情,我会这样做: 重点很明确:如果该语句为假,则我不希望该函数继续。 另一方面,有些函数具有多个选项,在这种情况下,我