在NumPy中,我可以通过以下方式获取特定数据类型的大小(以字节为单位):
datatype(...).itemsize
或:
datatype(...).nbytes
例如:
np.float32(5).itemsize #4
np.float32(5).nbytes #4
我有两个问题。首先,有没有办法获取此信息而无需创建数据类型的实例?第二,itemsize
和nbytes
之间有什么区别?
答案 0 :(得分:45)
您需要dtype
的实例来获取itemsize,但您不需要ndarray
的实例。 (如果在一秒钟内变得清晰,nbytes
是数组的属性,而不是dtype。)
E.g。
print np.dtype(float).itemsize
print np.dtype(np.float32).itemsize
print np.dtype('|S10').itemsize
就itemsize
和nbytes
之间的差异而言,nbytes
只是x.itemsize * x.size
。
E.g。
In [16]: print np.arange(100).itemsize
8
In [17]: print np.arange(100).nbytes
800
答案 1 :(得分:16)
查看NumPy C源文件,这是评论:
size : int
Number of elements in the array.
itemsize : int
The memory use of each array element in bytes.
nbytes : int
The total number of bytes required to store the array data,
i.e., ``itemsize * size``.
所以在NumPy:
>>> x = np.zeros((3, 5, 2), dtype=np.float64)
>>> x.itemsize
8
所以.nbytes
是以下的快捷方式:
>>> np.prod(x.shape)*x.itemsize
240
>>> x.nbytes
240
因此,要获得NumPy数组的基本大小而不创建它的实例,您可以这样做(假设例如3x5x2的双精度数组):
>>> np.float64(1).itemsize * np.prod([3,5,2])
240
然而,来自NumPy帮助文件的重要说明:
| nbytes
| Total bytes consumed by the elements of the array.
|
| Notes
| -----
| Does not include memory consumed by non-element attributes of the
| array object.