Data type Object (dtype) in NumPy Python
                                        
                                                                                    
                                                
                                                    Last Updated : 
                                                    11 Aug, 2021
                                                
                                                 
                                                 
                                             
                                                                             
                                                             
                            
                            
                                                                                    
                
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)
- The 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 a 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.  
1. Constructing a data type (dtype) object: A data type object is an instance of the 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# 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
    # 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 the 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
    # 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
2. Data type Objects with Structured Arrays: Data type objects are useful for creating structured arrays.  A structured array is one that 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 the case of structured arrays, the dtype object will also be structured.  
            Python
    # 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
    # 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']
References :  
  
                                
                                
                            
                                                                                
                                                            
                                                    
                                                
                                                        
                            
                        
                                                
                        
                                                                                    
                                                                Explore
                                    
                                        Python Fundamentals
Python Data Structures
Advanced Python
Data Science with Python
Web Development with Python
Python Practice