Размер данных с использованием NumPy
В NumPy я могу получить размер (в байтах) определенного типа данных:
datatype(...).itemsize
или
datatype(...).nbytes
Например:
np.float32(5).itemsize #4
np.float32(5).nbytes #4
У меня есть два вопроса. Во-первых, есть ли способ получить эту информацию, не создавая экземпляр типа данных? Во-вторых, какая разница между itemsize
и nbytes
?
Ответы
Ответ 1
Вам нужен экземпляр dtype
для получения элементов, но вам не нужен экземпляр ndarray
. (Как станет ясно в секунду, nbytes
является свойством массива, а не dtype.)
например.
print np.dtype(float).itemsize
print np.dtype(np.float32).itemsize
print np.dtype('|S10').itemsize
Что касается разницы между itemsize
и nbytes
, nbytes
является просто x.itemsize * x.size
.
например.
In [16]: print np.arange(100).itemsize
8
In [17]: print np.arange(100).nbytes
800
Ответ 2
Глядя на исходный файл 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.