Data type Object (dtype) in NumPy Python

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.  

  1. 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.
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    # 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))

    chevron_right

    
    

    Output:

    int16
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    # 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)

    chevron_right

    
    

    Output:

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

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



    1. 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)
    2. int8,…,uint8,…,float16, float32, float64, complex64, complex128
         (this time with bit sizes)

    Note :

    dtype is different from type. 
    
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    # 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)

    chevron_right

    
    

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

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    # 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'])

    chevron_right

    
    

    Output:

    ('<f8', (2,))
    
    
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    # 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'])

    chevron_right

    
    


    Output:

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

References :

This article is contributed by Ayushi Asthana. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up