【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 条评论
登录 后参与评论

相关文章

来自专栏Django Scrapy

python使用正则表达式

正则表达式 目标: 了解 : (0)\w 匹配 一个字母或者数字 (1)\d 只匹配数字 (2)\s 至少匹配一个空格 同理"\_","\-"分别匹配 ...

3438
来自专栏GreenLeaves

JavaScript引用类型之Object类型

在JavaScript中大多数的引用类型都是Object的实例,Object类型也是使用最多的类型! 创建Object类型实例的方式有两种,下面分别来分析一下:...

1935
来自专栏web前端教室

十一国庆节 之 “变量与函数同名时,会输出谁?”

看这样一个题目: b = function c() { a = 1, b = 2, c = 3; console.log(a); //1 ...

16910
来自专栏瓜大三哥

Matlab基本运算3

字符串指的是1xn的字符数组。单个字符是按照unicode编码存储的,每个字符占两个字节 ? 在matlab中,只要用(‘)将需要设定的字符串括起来。 disp...

1866
来自专栏Java帮帮-微信公众号-技术文章全总结

04-02.总结switch,for,while,do。while跳转语句

(4)do...while循环 A:基本格式 do { 循环体语句; }while(判断条件语句); 扩展格式: 初始化语句; do { 循环体语...

3474
来自专栏天天

background、转换、过渡

693
来自专栏Python

python基础之数据类型与变量

一.变量 1 什么是变量之声明变量 #变量名=变量值 age=18 gender1='male' gender2='female' 2 为什么要有变量 变量作...

2586
来自专栏飞雪无情的博客

Go语言实战笔记(七)| Go 类型

Go 语言是一种静态类型的编程语言,所以在编译器进行编译的时候,就要知道每个值的类型,这样编译器就知道要为这个值分配多少内存,并且知道这段分配的内存表示什么。

543
来自专栏GopherCoder

Python 强化训练:第六篇

1674
来自专栏软件开发

CSS3与页面布局学习总结(六)——CSS3新特性(阴影、动画、渐变、变形、伪元素等)

CSS3在CSS2.1的基础上新增加了许多属性,这里选择了较常用的一些功能与大家分享,帮助文档中有很详细的描述,可以在本文的示例中获得帮助文档。 一、阴影 1....

2675

扫码关注云+社区