56

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

datatype(...).itemsize

或者:

datatype(...).nbytes

例如:

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

我有两个问题。首先,有没有办法在不创建数据类型实例的情况下获取这些信息?itemsize第二,和有什么区别nbytes

4

2 回答 2

75

您需要 的实例dtype来获取项目大小,但您不需要 . 的实例ndarray。(稍后将变得清楚,nbytes是数组的属性,而不是 dtype。)

例如

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

至于和之间的区别itemsize,只是。nbytesnbytesx.itemsize * x.size

例如

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

In [17]: print np.arange(100).nbytes
800
于 2013-06-06T21:35:53.667 回答
17

查看 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.
于 2013-06-06T22:01:32.337 回答