使用NumPy的数据类型大小

2jcobegt  于 2023-10-19  发布在  其他
关注(0)|答案(3)|浏览(102)

在NumPy中,我可以通过以下方式获取特定数据类型的大小(以字节为单位):

datatype(...).itemsize

或:

datatype(...).nbytes

举例来说:

np.float32(5).itemsize # 4
np.float32(5).nbytes   # 4

我有两个问题。首先,有没有一种方法可以 * 不创建数据类型的示例 * 就获得这些信息?itemsizenbytes有什么区别?

xmq68pz9

xmq68pz91#

你需要一个dtype的示例来获取itemsize,但你不应该需要ndarray的示例。(很快就会明白,nbytes是数组的属性,而不是dtype。
例如

print np.dtype(float).itemsize
print np.dtype(np.float32).itemsize
print np.dtype('|S10').itemsize

至于itemsizenbytes之间的差异,nbytes只是x.itemsize * x.size
例如

In [16]: print np.arange(100).itemsize
8

In [17]: print np.arange(100).nbytes
800
cs7cruho

cs7cruho2#

查看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的double数组):

>>> 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.
j13ufse2

j13ufse23#

int使用np.iinfo,float使用np.finfo。然后,使用.bits属性,除以8得到字节数。根据问题,不需要创建数据类型的示例。
举例来说:

np.iinfo(np.int32).bits // 8      # 4  
np.finfo(np.float16).bits // 8    # 2

相关问题