Numpy | Data Type Objects

Last Updated : 25 Jan, 2024

Every ndarray has an associated data type (dtype) object. This data type object (dtype) informs us about the layout of the array. This means it gives us information about :

  • Type of the data (integer, float, Python object etc.)
  • Size of the data (number of bytes)
  • Byte order of the data (little-endian or big-endian)
  • If the data type is a sub-array, what is its shape and data type.

The values of an ndarray are stored in a buffer which can be thought of as a contiguous block of memory bytes. So how these bytes will be interpreted is given by the dtype object.  

Constructing a data type (dtype) object : Data type object is an instance of numpy.dtype class and it can be created using numpy.dtype.

Parameters:

obj: Object to be converted to a data type object.
align : [bool, optional] Add padding to the fields to match what a C compiler would output for a similar C-struct.
copy : [bool, optional] Make a new copy of the data-type object. If False, the result may just be a reference to a built-in data-type object.

# Python Program to create a data type object
import numpy as np

# np.int16 is converted into a data type object.
print(np.dtype(np.int16))

Output:

int16
# Python Program to create a data type object 
# containing a 32 bit big-endian integer
import numpy as np

# i4 represents integer of size 4 byte
# > represents big-endian byte ordering and
# < represents little-endian encoding.
# dt is a dtype object
dt = np.dtype('>i4')

print("Byte order is:",dt.byteorder)

print("Size is:", dt.itemsize)

print("Data type is:", dt.name)

Output:

Byte order is: >
Size is: 4
Name of data type is: int32

The type specifier (i4 in above case) can take different forms:

b1, i1, i2, i4, i8, u1, u2, u4, u8, f2, f4, f8, c8, c16, a (representing bytes, ints, unsigned ints, floats, complex and fixed length strings of specified byte lengths)

int8,…,uint8,…,float16, float32, float64, complex64, complex128 (this time with bit sizes)

Note : dtype is different from type. 

# Python program to differentiate
# between type and dtype.
import numpy as np

a = np.array([1])

print("type is: ",type(a))
print("dtype is: ",a.dtype)

Output:

type is:    
dtype is:  int32

 
Data type Objects with Structured Arrays : Data type objects are useful for creating structured arrays. A structured array is the one which contains different types of data. Structured arrays can be accessed with the help of fields.

A field is like specifying a name to the object. In case of structured arrays, the dtype object will also be structured. 


# Python program for demonstrating 
# the use of fields
import numpy as np

# A structured data type containing a
# 16-character string (in field ‘name’) 
# and a sub-array of two 64-bit floating
# -point number (in field ‘grades’)

dt = np.dtype([('name', np.unicode_, 16),
               ('grades', np.float64, (2,))])

# Data type of object with field grades
print(dt['grades'])

# Data type of object with field name 
print(dt['name'])

Output:

('<f8', (2,))

# Python program to demonstrate 
# the use of data type object
# with structured array.
import numpy as np

dt = np.dtype([('name', np.unicode_, 16),
               ('grades', np.float64, (2,))])

# x is a structured array with names
# and marks of students.
# Data type of name of the student is 
# np.unicode_ and data type of marks is 
# np.float(64)
x = np.array([('Sarah', (8.0, 7.0)),
              ('John', (6.0, 7.0))], dtype=dt)

print(x[1])

print("Grades of John are: ", x[1]['grades'])
print("Names are: ", x['name'])

Output:

('John', [ 6.,  7.])
Grades of John are:  [ 6.  7.]
Names are:  ['Sarah' 'John']


Share your thoughts in the comments

Similar Reads