## Introduction

NumPy is a powerful library in Python used for numerical computing. It provides support for large, multi-dimensional arrays and matrices, along with a collection of mathematical functions to operate on these arrays. In this tutorial, we’ll cover the basics of NumPy, including installation, creating arrays, basic operations, indexing, slicing, and some common functions.

## Installation

If you haven’t installed NumPy yet, you can do so using pip, Python’s package installer. Open your terminal or command prompt and type:

`pip install numpy`

Make sure you have Python installed on your system before running the above command.

## Importing NumPy

To use NumPy in your Python script or interactive session, you need to import it:

`import numpy as np`

By convention, `np`

is the alias most commonly used for NumPy. It allows you to access NumPy functions using `np.function_name()`

.

## Creating NumPy Arrays

### 1. Creating Arrays from Python Lists

You can create a NumPy array from a regular Python list using `np.array()`

:

```
import numpy as np
# Create a 1D array
arr1 = np.array([1, 2, 3, 4, 5])
print("1D Array:")
print(arr1)
# Create a 2D array (matrix)
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("\n2D Array:")
print(arr2)
```

### 2. Creating Arrays with Initial Values

You can create arrays filled with specific values using functions like `np.zeros()`

, `np.ones()`

, `np.full()`

, etc.:

```
# 1D array filled with zeros
zeros_array = np.zeros(5)
print("\nArray of Zeros:")
print(zeros_array)
# 2D array (3x3) filled with ones
ones_array = np.ones((3, 3))
print("\nArray of Ones:")
print(ones_array)
# 3x3 array filled with a specific value (e.g., 5)
full_array = np.full((3, 3), 5)
print("\nArray with Specific Value:")
print(full_array)
```

### 3. Creating Arrays with a Range of Values

You can create arrays with a range of values using `np.arange()`

or `np.linspace()`

:

```
# Array with values from 0 to 9 (exclusive)
range_array = np.arange(10)
print("\nArray with Range of Values:")
print(range_array)
# Array with 5 values between 0 and 1
linspace_array = np.linspace(0, 1, 5)
print("\nArray with Linear Spacing:")
print(linspace_array)
```

## Basic Operations

NumPy arrays support element-wise operations, making it easy to perform mathematical calculations on arrays.

### Arithmetic Operations

```
# Creating two arrays for demonstration
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([5, 6, 7, 8])
# Addition
addition = arr1 + arr2
print("\nAddition:")
print(addition)
# Subtraction
subtraction = arr2 - arr1
print("\nSubtraction:")
print(subtraction)
# Multiplication
multiplication = arr1 * arr2
print("\nMultiplication:")
print(multiplication)
# Division
division = arr2 / arr1
print("\nDivision:")
print(division)
```

### Array Comparison

```
# Creating two arrays for demonstration
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([4, 2, 3, 4])
# Element-wise comparison
equal = arr1 == arr2
print("\nElement-wise Comparison:")
print(equal)
# Array-wise comparison
array_equal = np.array_equal(arr1, arr2)
print("\nArray-wise Comparison:")
print(array_equal)
```

## Indexing and Slicing

### Indexing

You can access elements of a NumPy array using indexing, similar to Python lists. Remember that indexing starts from 0.

```
arr = np.array([10, 20, 30, 40, 50])
# Accessing elements
print("\nAccessing Elements:")
print("Element at index 0:", arr[0])
print("Element at index 3:", arr[3])
# Negative indexing (from the end)
print("Element at index -1 (last element):", arr[-1])
```

### Slicing

Slicing allows you to create a subarray from an array:

```
arr = np.array([10, 20, 30, 40, 50])
# Slicing
print("\nSlicing:")
print("Elements from index 1 to 3:", arr[1:4])
print("Elements from index 0 to 2:", arr[:3])
print("Elements from index 3 to end:", arr[3:])
```

## Common NumPy Functions

NumPy provides a wide range of mathematical functions that operate on arrays:

### Mathematical Functions

```
arr = np.array([1, 2, 3, 4, 5])
# Square root
print("\nSquare Root:")
print(np.sqrt(arr))
# Exponential
print("\nExponential:")
print(np.exp(arr))
# Trigonometric functions (sin, cos, tan)
print("\nSin:")
print(np.sin(arr))
print("\nCos:")
print(np.cos(arr))
print("\nTan:")
print(np.tan(arr))
```

### Statistical Functions

```
arr = np.array([1, 2, 3, 4, 5])
# Mean
print("\nMean:")
print(np.mean(arr))
# Median
print("\nMedian:")
print(np.median(arr))
# Standard deviation
print("\nStandard Deviation:")
print(np.std(arr))
# Sum
print("\nSum:")
print(np.sum(arr))
```

## Conclusion

NumPy is a fundamental library for numerical computing in Python, offering powerful tools for creating and manipulating arrays. In this tutorial, we covered basic array creation, arithmetic operations, indexing, slicing, and common functions. This should give you a good starting point for using NumPy in your data science, machine learning, or scientific computing projects. For more advanced functionalities, refer to the official NumPy documentation: NumPy Docs.