【发布时间】:2019-01-18 08:48:49
【问题描述】:
我正在尝试确定python中不同数据类型的大小,并编写了以下代码。每行的输出都显示为它们旁边的 cmets。
import numpy as np
import sys
print(sys.version) # 3.6.7
print(np.version.version) # 1.15.4
i = 2
print(type(i)) # <class 'int'>
print(sys.getsizeof(i)) # 28
j = np.int64(3)
print(type(j)) # <class 'numpy.int64'>
print(sys.getsizeof(j)) # 32
a = np.array([[1,2],[3,4],[5,6]])
print(type(a)) # <class 'numpy.ndarray'>
print(sys.getsizeof(a)) # 160
print(type(a[0][0])) # <class 'numpy.int64'>
print(sys.getsizeof(a[0][0])) # 32
a = np.array([[1,2],[3,4],[5,6],[7,8]])
print(sys.getsizeof(a)) # 176
从上面的输出中,一个 6 元素数组的大小是 160,一个 8 元素数组的大小是 176,所以我可以得出结论,数组中每个元素的大小是 8 字节,并且数组头的大小(常量) 是 112 字节吗?每个元素的大小是恒定的还是取决于它的值(大还是小)?
另外,当我打印 a[0][0] 的大小时,为什么我得到 32 而不是 8? python 和 numpy 整数和数组背后的数学究竟是什么?
【问题讨论】:
-
a[0][0]也是numpy.ndarray。为什么不期待 120? -
Numpy 是用 cython 编码的,所以下面是 C,我认为你不能真正依赖 pyhon int 的大小(我认为它们在 C 中被翻译成 long)
标签: python python-3.x