【Python】小谈numpy数组占用内存空间问题

之前跟同学讨论过numpy数组的占用空间大小问题,但是今天给忘了,又重新试验了一下,主要是利用sys模块的getsizeof函数,使用的版本是 Python3.5。记录下来,以备后忘。

问题

  1. 一个空的numpy数组对象占用多大空间。
  2. 一个int32int64float32float64数占用多大空间。

代码

import numpy as np
import sys

# 32位整型
ai32 = np.array([], dtype=np.int32)
bi32 = np.arange(1, dtype=np.int32)
ci32 = np.arange(5, dtype=np.int32)

# 64位整型
ai64 = np.array([], dtype=np.int64)
bi64 = np.arange(1, dtype=np.int64)
ci64 = np.arange(5, dtype=np.int64)

# 32位浮点数
af32 = np.array([], dtype=np.float32)
bf32 = np.arange(1, dtype=np.float32)
cf32 = np.arange(5, dtype=np.float32)

# 64位浮点数
af64 = np.array([], dtype=np.float64)
bf64 = np.arange(1, dtype=np.float64)
cf64 = np.arange(5, dtype=np.float64)

print("size of 0 int32 number: %f" % sys.getsizeof(ai32))
print("size of 1 int32 number: %f" % sys.getsizeof(bi32))
print("size of 5 int32 numbers: %f" % sys.getsizeof(ci32), end='\n\n')

print("size of 0 int64 number: %f" % sys.getsizeof(ai64))
print("size of 1 int64 number: %f" % sys.getsizeof(bi64))
print("size of 5 int64 numbers: %f" % sys.getsizeof(ci64), end='\n\n')

print("size of 0 float32 number: %f" % sys.getsizeof(af32))
print("size of 1 float32 number: %f" % sys.getsizeof(bf32))
print("size of 5 float32 numbers: %f" % sys.getsizeof(cf32), end='\n\n')

print("size of 0 float64 number: %f" % sys.getsizeof(af64))
print("size of 1 float64 number: %f" % sys.getsizeof(bf64))
print("size of 5 float64 numbers: %f" % sys.getsizeof(cf64))

结果

size of 0 int32 number: 96.000000
size of 1 int32 number: 100.000000
size of 5 int32 numbers: 116.000000

size of 0 int64 number: 96.000000
size of 1 int64 number: 104.000000
size of 5 int64 numbers: 136.000000

size of 0 float32 number: 96.000000
size of 1 float32 number: 100.000000
size of 5 float32 numbers: 116.000000

size of 0 float64 number: 96.000000
size of 1 float64 number: 104.000000
size of 5 float64 numbers: 136.000000

以上结果说明:

  1. 一个空的 numpy 数组,无论什么类型,都是占用 96 个字节(byte)。
  2. 一个 int32 和一个 float32 都是占用 4 个字节,而64位的都占用 8 个字节。

其他类型占用空间大小可以采用类似代码进行测试。

此外,注意 sys.getsizeof() 函数返回的是 这个对象所占用的空间大小,对于数组来说,除了数组中每个值占用空间外,数组对象还会存储数组长度、数组类型等其他信息。而如果只想要获取数组中存储的值的占用空间大小,可以使用 numpy.ndarray.nbytes ,使用 numpy.ndarray.itemsize 获取数组中每个值的占用空间大小。

ci32.nbytes    # 20
ci32.itemsize    # 4

END

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏行者常至

构造代码块、构造函数、静态代码块 学习笔记

941
来自专栏码云1024

c++ 深入理解数组

2556
来自专栏漫漫深度学习路

python命名空间

python的命名空间 python使用命名空间记录变量。python中的命名空间就像是一个dict,key是变量的名字,value是变量的值。 python中...

1696
来自专栏Hongten

算法入门-二分查找算法

2.如果中间值小于被查找的值,则选择中间值右边的数组,重复1,直到发现与被查找的值相等的数组元素或返回某个值,表示被查找的值在数组中不存在。

962
来自专栏前端开发

【JavaScript】Array数组对象下的方法

1355
来自专栏水击三千

浅谈JavaScript的面向对象程序设计(二)

  前面介绍通过Object构造函数或者字面量创建单个对象,但是通过这个的方法创建对象有明显的缺点:调用同一个接口创建多个实例,会产生大量的重复代码。怎么样解决...

2326
来自专栏思考的代码世界

Python常用函数整理

1283
来自专栏锦小年的博客

python学习笔记7.6-内建模块itertools

python有一个高级特性就是迭代器,能够提供各种各样的迭代方式,而代码却非常的简单。itertools提供了非常丰富的有关于迭代操作的函数,下面一一介绍。 再...

1819
来自专栏遊俠扎彪

C++中的字符数组、字符串、字符指针的一些笔记

1、sizeof会计算实际内存空间,strlen会计算C风格的字符串的实际字符数(不包括\0)。

18010
来自专栏程序员互动联盟

【java基础】static关键字--静态块

在说明static关键字的第三个用法时,我们有必要重新梳理一下一个对象的初始化过程。以下面的代码为例: package com.dotgua.study; cl...

34511

扫码关注云+社区