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
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))
# 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)
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() print("type is: ",type(a)) print("dtype is: ",a.dtype)
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'])
# 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) print("Grades of John are: ", x['grades']) print("Names are: ", x['name'])
('John', [ 6., 7.]) Grades of John are: [ 6. 7.] Names are: ['Sarah' 'John']