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 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:
int16
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 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 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']
References :