Python Training , study and exam guide
1 Introduction to Python
1.1 What is Python?
1.2 History of Python
1.3 Features of Python
1.4 Python Applications
1.5 Setting up the Python Environment
1.6 Running Your First Python Program
2 Python Basics
2.1 Python Syntax and Indentation
2.2 Variables and Data Types
2.2 1 Numbers
2.2 2 Strings
2.2 3 Lists
2.2 4 Tuples
2.2 5 Sets
2.2 6 Dictionaries
2.3 Operators
2.3 1 Arithmetic Operators
2.3 2 Comparison Operators
2.3 3 Logical Operators
2.3 4 Assignment Operators
2.3 5 Membership Operators
2.3 6 Identity Operators
2.4 Input and Output
2.4 1 Input Function
2.4 2 Output Function
2.5 Comments
2.5 1 Single-line Comments
2.5 2 Multi-line Comments
3 Control Flow
3.1 Conditional Statements
3.1 1 If Statement
3.1 2 If-Else Statement
3.1 3 Elif Statement
3.1 4 Nested If Statements
3.2 Loops
3.2 1 For Loop
3.2 2 While Loop
3.2 3 Nested Loops
3.3 Loop Control Statements
3.3 1 Break Statement
3.3 2 Continue Statement
3.3 3 Pass Statement
4 Functions
4.1 Defining Functions
4.2 Function Arguments
4.2 1 Positional Arguments
4.2 2 Keyword Arguments
4.2 3 Default Arguments
4.2 4 Variable-length Arguments
4.3 Return Statement
4.4 Lambda Functions
4.5 Scope of Variables
4.5 1 Local Variables
4.5 2 Global Variables
4.6 Recursion
5 Data Structures
5.1 Lists
5.1 1 List Operations
5.1 2 List Methods
5.1 3 List Comprehensions
5.2 Tuples
5.2 1 Tuple Operations
5.2 2 Tuple Methods
5.3 Sets
5.3 1 Set Operations
5.3 2 Set Methods
5.4 Dictionaries
5.4 1 Dictionary Operations
5.4 2 Dictionary Methods
5.5 Advanced Data Structures
5.5 1 Stacks
5.5 2 Queues
5.5 3 Linked Lists
6 Modules and Packages
6.1 Importing Modules
6.2 Creating Modules
6.3 Standard Library Modules
6.3 1 Math Module
6.3 2 Random Module
6.3 3 DateTime Module
6.4 Creating Packages
6.5 Installing External Packages
7 File Handling
7.1 Opening and Closing Files
7.2 Reading from Files
7.2 1 read()
7.2 2 readline()
7.2 3 readlines()
7.3 Writing to Files
7.3 1 write()
7.3 2 writelines()
7.4 File Modes
7.5 Working with CSV Files
7.6 Working with JSON Files
8 Exception Handling
8.1 Try and Except Blocks
8.2 Handling Multiple Exceptions
8.3 Finally Block
8.4 Raising Exceptions
8.5 Custom Exceptions
9 Object-Oriented Programming (OOP)
9.1 Classes and Objects
9.2 Attributes and Methods
9.3 Constructors and Destructors
9.4 Inheritance
9.4 1 Single Inheritance
9.4 2 Multiple Inheritance
9.4 3 Multilevel Inheritance
9.5 Polymorphism
9.6 Encapsulation
9.7 Abstraction
10 Working with Libraries
10.1 NumPy
10.1 1 Introduction to NumPy
10.1 2 Creating NumPy Arrays
10.1 3 Array Operations
10.2 Pandas
10.2 1 Introduction to Pandas
10.2 2 DataFrames and Series
10.2 3 Data Manipulation
10.3 Matplotlib
10.3 1 Introduction to Matplotlib
10.3 2 Plotting Graphs
10.3 3 Customizing Plots
10.4 Scikit-learn
10.4 1 Introduction to Scikit-learn
10.4 2 Machine Learning Basics
10.4 3 Model Training and Evaluation
11 Web Development with Python
11.1 Introduction to Web Development
11.2 Flask Framework
11.2 1 Setting Up Flask
11.2 2 Routing
11.2 3 Templates
11.2 4 Forms and Validation
11.3 Django Framework
11.3 1 Setting Up Django
11.3 2 Models and Databases
11.3 3 Views and Templates
11.3 4 Forms and Authentication
12 Final Exam Preparation
12.1 Review of Key Concepts
12.2 Practice Questions
12.3 Mock Exams
12.4 Exam Tips and Strategies
10 1 NumPy Explained

10 1 NumPy Explained

Key Concepts

NumPy is a fundamental package for scientific computing in Python. The key concepts include:

1. NumPy Arrays

NumPy arrays are the central data structure in NumPy. They are similar to Python lists but are more efficient for numerical computations.

Example:

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
print(arr)  # Output: [1 2 3 4 5]
    

Analogy: Think of a NumPy array as a specialized container optimized for numerical data, like a high-performance toolbox for numbers.

2. Array Creation

NumPy provides various functions to create arrays. Common methods include np.array(), np.zeros(), np.ones(), and np.arange().

Example:

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.zeros((2, 3))
arr3 = np.ones((3, 2))
arr4 = np.arange(0, 10, 2)

print(arr1)  # Output: [1 2 3]
print(arr2)  # Output: [[0. 0. 0.]
             #          [0. 0. 0.]]
print(arr3)  # Output: [[1. 1.]
             #          [1. 1.]
             #          [1. 1.]]
print(arr4)  # Output: [0 2 4 6 8]
    

Analogy: Creating arrays is like setting up a workspace with different tools and materials, ready for various tasks.

3. Array Attributes

Array attributes provide information about the array, such as its shape, size, and data type.

Example:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])

print(arr.shape)  # Output: (2, 3)
print(arr.size)   # Output: 6
print(arr.dtype)  # Output: int64
    

Analogy: Array attributes are like the specifications of a machine, telling you its dimensions, capacity, and type of components.

4. Array Operations

NumPy supports element-wise operations, mathematical functions, and linear algebra operations.

Example:

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

print(arr1 + arr2)  # Output: [5 7 9]
print(arr1 * arr2)  # Output: [4 10 18]
print(np.dot(arr1, arr2))  # Output: 32
    

Analogy: Array operations are like performing calculations on a spreadsheet, but much faster and more powerful.

5. Indexing and Slicing

Indexing and slicing allow you to access and manipulate specific elements or subsets of an array.

Example:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(arr[0, 1])  # Output: 2
print(arr[1:3, 0:2])  # Output: [[4 5]
                      #          [7 8]]
    

Analogy: Indexing and slicing are like selecting specific cells or ranges in a spreadsheet for analysis or modification.

6. Broadcasting

Broadcasting allows NumPy to perform operations on arrays of different shapes by automatically adjusting their sizes.

Example:

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([[4], [5], [6]])

print(arr1 + arr2)  # Output: [[5 6 7]
                    #          [6 7 8]
                    #          [7 8 9]]
    

Analogy: Broadcasting is like a smart assistant that adjusts the size of your data to fit the operation, making your work more efficient.

Putting It All Together

By understanding and using these concepts effectively, you can leverage NumPy's power for efficient numerical computations in Python.

Example:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# Array operations
arr_squared = arr ** 2

# Indexing and slicing
sub_arr = arr[1:3, 0:2]

# Broadcasting
arr_sum = arr + np.array([10, 20, 30])

print(arr_squared)  # Output: [[ 1  4  9]
                    #          [16 25 36]
                    #          [49 64 81]]
print(sub_arr)  # Output: [[4 5]
                #          [7 8]]
print(arr_sum)  # Output: [[11 22 33]
                #          [14 25 36]
                #          [17 28 39]]