NumPy

NumPy

NumPy stands for Numerical Python, it’s a Python module that was created in 2005 for working with arrays,

Install (If pip does not work, try pip3)

pip # Python’s package manager used to install libraries
install # Tells pip to download and install a package
numpy # A Python library for numerical and scientific computing

(Host) $ pip install numpy

import numpy as np # Imports the NumPy library and gives it the alias np

import numpy as np

Create an Array

A data structure that stores more than one item of the same type; it’s similar to lists in Python but more efficient, convenient, requires less memory and fast. To create an array, use the .array() with the items surrounded by [], you can also pass the dtype parameter to the .array() method for describing the data type

Example

import numpy as np # Imports the NumPy library and gives it the alias np
arr = np.array([1,2,3]) # Creates a NumPy array from the Python list
print(arr) # Prints the array

import numpy as np
arr = np.array([1,2,3])
print(arr)

Result

[1 2 3]

Data Types

If you want to describe the data type, pass dtype the with the first letter of the data type, you can also get the type size using np.dtype('b').itemsize

i integer
b boolean
u unsigned integer
f float
c complex float
m timedelta
M datetime
O object
S string
U unicode string
V void

Example

import numpy as np # Imports the NumPy library and gives it the alias np
arr = np.array([1,2,3], dtype=’f’) # Creates a NumPy array from the Python list and set the data type of the elements to float32, so the numbers are stored as floating-point numbers
print(arr) # Prints the array

import numpy as np
arr = np.array([1,2,3], dtype='f')
print(arr)

Result

[1. 2. 3.]

Create Multi-Dimensional

To create a multi-dimensional array, use the .array() with the items surrounded by [] within [], you can also pass the dtype parameter to the .array() method for describing the data type

Example

import numpy as np # Imports the NumPy library and gives it the alias np
arr = np.array([[‘item 1′,’item 2’],[‘item 1′,’item 2’]]) # Creates a 2-dimensional NumPy array (a 2×2 “matrix”) from a nested list
print(arr) # Prints the array

import numpy as np
arr = np.array([['item 1','item 2'],['item 1','item 2']])
print(arr)

Result

[['item 1' 'item 2']
 ['item 1' 'item 2']]

Example

import numpy as np # Imports the NumPy library and gives it the alias np
arr = np.array([[1,2],[1,2]], dtype=’f’) # Creates a 2-dimensional NumPy array (a 2×2 “matrix”) from a nested list and set the data type of the elements to float32, so the numbers are stored as floating-point numbers
print(arr) # Prints the array

import numpy as np
arr = np.array([[1,2],[1,2]], dtype='f')
print(arr)

Result

[[1. 2.]
[1. 2.]]

Create Empty Arrays

To create an empty array, you can either use the .empty() or .zeros() methods. The .empty() method will return an array without initializing entries, whereas the .zeros() method will return an array filled with zeros,.

Example

import numpy as np # Imports the NumPy library and gives it the alias np
arr = np.zeros(shape=(10),dtype=’i’) # Creates a 10×1 array, all items initialized to 0s, stored as integer numbers
print(arr) # Prints the array

import numpy as np
arr = np.zeros(shape=(10),dtype='i')
print(arr)

Result

[0 0 0 0 0 0 0 0 0 0]

Example

import numpy as np # Imports the NumPy library and gives it the alias np
arr = np.empty(shape=(10)) # Creates a 10×1 array, do not initialize the items, stored as integer numbers
print(arr) # Prints the array

import numpy as np
arr = np.empty(shape=(10),dtype='i')
print(arr)

Result

[ 0 1072693248  0 1074135040  0 1075314688
  0 1076199424  0 1076953088]

Create an Array Filled With Ones

To create an array that has 1s in it, you can either use the .ones() method

Example

import numpy as np # Imports the NumPy library and gives it the alias np
arr = np.ones(shape=(10),dtype=’i’) # Creates a 10×1 array, do not initialize the items, stored as integer numbers
print(arr) # Prints the array

import numpy as np
arr = np.ones(shape=(10),dtype='i')
print(arr)

Result

[1 1 1 1 1 1 1 1 1 1]

Accessing Elements

To access an element of an array, use the index. E.g., to access the first item in a 1d array, you can do [0]. To access 2nd element of the second array in a 2d array, you can do [1][1], and so on

Example

import numpy as np # Imports the NumPy library and gives it the alias np
arr = np.array([1,2], dtype=’f’) # Creates an array with values 1 and 2, set the data type of the elements to float32.
print(arr[0]) # Prints the first element of the array (indexing starts at 0).

import numpy as np 
arr = np.array([1,2], dtype='f')
print(arr[0])

Result

1.0

Slicing Arrays

To slice an array, use the smart indexing [], you can do something like this [start:end] or [start:end:step]

Example

import numpy as np # Imports the NumPy library and gives it the alias np
arr = np.array([1,2,3,4,5]) # Creates an array with values 1,2,3,4,5
print(arr[1:4]) # The syntax is arr[start:stop], which selects elements starting from index start up to but not including index stop, prints the selected items

import numpy as np
arr = np.array([1,2,3,4,5])
print(arr[1:4])

Result

[2 3 4]

Get Array Size

To get number of items of an array, use the .size() method

import numpy as np # Imports the NumPy library and gives it the alias np
arr = np.array([[1,2],[1,2]], dtype=’f’) # Creates a 2-dimensional NumPy array (a 2×2 “matrix”) from a nested list, and set the data type of the elements to float32
print(arr.size) # Prints the array size (The total of items in the array)

Example

import numpy as np 
arr = np.array([[1,2],[1,2]], dtype='f')
print(arr.size)

Result

4

Get Array Shape

To get the shape of an array, use the .shape() method

import numpy as np # Imports the NumPy library and gives it the alias np
arr = np.array([[1,2],[1,2]], dtype=’f’) # Creates a 2-dimensional NumPy array (a 2×2 “matrix”) from a nested list, and set the data type of the elements to float32
print(arr.shape) # Prints the array size (The total of items in the array)

Example

import numpy as np 
arr = np.array([[1,2],[1,2]], dtype='f')
print(arr.shape)

Result

(2, 2)

Reshape Arrays

You can reshape an array using the .reshape() method

Example

import numpy as np # Imports the NumPy library and gives it the alias np
arr = np.array([1,2,3,4,5,6])  # Creates an array with values 1,2,3,4,5,6
arr = arr.reshape(2,3) # Reshapes the array to 2×3 (2 rows and 3 columns)
print(arr) # Prints the array

import numpy as np
arr = np.array([1,2,3,4,5,6])
arr = arr.reshape(2,3)
print(arr)

Result

[[1 2 3]
 [4 5 6]]

Flatten Arrays

You can flatten (Convert from multi-dimensional to one-dimensional) an array using the .reshape() method with -1

Example

import numpy as np # Imports the NumPy library and gives it the alias np
arr = np.array([[1,2,3],[4,5,6]])  # Creates a 2d array
arr = arr.reshape(2,3) # Reshapes the array to a 1d array 
print(arr) # Prints the array

import numpy as np
arr = np.array([[1,2,3],[4,5,6]])
arr = arr.reshape(-1)
print(arr)

Result

[1 2 3 4 5 6]

Finding Elements

To find an element, use the np.argwhere() method

Example

import numpy as np # Imports the NumPy library and gives it the alias np
arr = np.array([[1,2,3],[4,5,6]])  # Creates a 2d array
print(np.argwhere(arr == 33)) # Prints the row and column location(s) where the value 33 appears in the array

import numpy as np
arr = np.array([[1,2,3],[11,22,33]])
print(np.argwhere(arr == 33))

Result

[[1 2]]

Removing Elements

To remove an element, use the np.delete() method

Example

import numpy as np # Imports the NumPy library and gives it the alias np
arr = np.array([1,2,3,4,5,6])  # Creates an array with values 1,2,3,4,5,6,7,8
index = np.argwhere(arr == 4) # Finds the row and column location(s) where the value 4 appears in the array
arr = np.delete(arr, index) # Removes the element(s) at the given index from arr, then stores the result back in arr
print(arr) # Prints the array

import numpy as np
arr = np.array([1,2,3,4,5,6,7,8])
index = np.argwhere(arr == 4)
arr = np.delete(arr, index)
print(arr)

Result

[1 2 3 5 6 7 8]
# Add arr = arr[arr != 4]
#np.place(arr,(arr == 4),5)

Creating Images

The following represents a single pixel with RGB values of (0, 0, 0), which is black.

Example

import numpy as np # Imports the NumPy library and gives it the alias np
import matplotlib.pyplot as plt # Import Matplotlib for plotting and image display
pixel_rgb = np.array([[[0, 0, 0]]], dtype=np.uint8) # Create a 1×1 image with an RGB pixel value of (0, 0, 0) – This represents a single black pixel, dtype=np.uint8 ensures values are in the valid range for image data (0–255)
plt.imshow(pixel_rgb) # Display the RGB pixel as an image
plt.title(“Example”) # Add a title above the image
plt.axis(‘off’) # Remove x and y axis ticks for a cleaner image display
plt.show() # Render the image on the screen

import numpy as np
import matplotlib.pyplot as plt
pixel_rgb = np.array([[[0, 0, 0]]], dtype=np.uint8)
plt.imshow(pixel_rgb)
plt.title("Example")
plt.axis('off')
plt.show()

Example

import numpy as np # Import NumPy for array creation and manipulation
from PIL import Image # Import Image module (not used directly here)
import matplotlib.pyplot as plt # Import matplotlib for image display (not used here)
img = np.zeros([1,1,3], dtype=np.uint8) # Create a 1×1 RGB image array initialized to zeros
img.fill(0) # Fill the array with 0 (black pixel)
print(img) # Print the pixel values of the image array

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
img = np.zeros([1,1,3],dtype=np.uint8)
img.fill(0)
print(img)

You can also list all pixels

umpy as np # Import NumPy for array creation and manipulation
from PIL import Image # Import Image module (not used directly here)
import matplotlib.pyplot as plt # Import matplotlib for image display (not used here)
img = np.zeros([1,1,3], dtype=np.uint8) # Create a 1×1 RGB image array initialized to zeros
img.fill(0) # Fill the array with 0 (black pixel)
height, width, _ = img.shape # Loop over each row (y-coordinate)
for y in range(height): # Loop over each row (y-coordinate)
    for x in range(width): # Loop over each column (x-coordinate)
        print(img[y, x]) # Print the pixel value at position (y, x), this is typically an array like [R, G, B]
plt.imshow(img) # Display the image using matplotlib
plt.title(“Example”) # Add a title to the image
plt.axis(‘off’) # Turn off axis ticks and labels
plt.show() # Render the image on the screen

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
img = np.zeros([1,1,3],dtype=np.uint8)
img.fill(0)
height, width, _ = img.shape
for y in range(height): 
    for x in range(width):
        print(img[y, x])
plt.imshow(img)
plt.title("Example")
plt.axis('off')
plt.show()

Converting Images Into Arrays

The following opens an image file using Pillow, converts the image into a NumPy array so its pixel values can be processed numerically, and then prints the resulting array.

from PIL import Image # Import Image class from Pillow to work with image files
import numpy as np # Import NumPy for numerical array operations
img = Image.open(‘example.png’) # Open the image file and load it as a PIL Image object
img_array = np.array(img) # Convert the image into a NumPy array (pixel values)
print(img_array) # Print the array representing the image pixels

from PIL import Image
import numpy as np
img = Image.open('example.png')
img_array = np.array(img)
print(img_array)

Create Random Image

Creates and shows a tiny, randomly colored image

umpy as np # Import NumPy for array creation and manipulation
from PIL import Image # Import Image module (not used directly here)
import matplotlib.pyplot as plt # Import matplotlib for image display (not used here)
pixel_rgb = np.random.randint(0,256, size=(10,10,3)) # Generate a 10×10 image with random RGB values, np.random.randint(0,256, size=(10,10,3)) creates integers from 0 to 255 for each RGB channel
plt.imshow(pixel_rgb) # Show the image from the pixel array
plt.title(“Example”) # Add a title to the image
plt.axis(‘off’) # Hide the axes for a cleaner display
plt.show() # Render the image on screen

import numpy as np
import matplotlib.pyplot as plt
pixel_rgb = np.random.randint(0,256, size=(10,10,3))
plt.imshow(pixel_rgb)
plt.title("Example")
plt.axis('off')
plt.show()

Cybersecurity – Example 1 (Network Traffic Analysis)

You use the np.mean() function to detect unusual spikes, which might indicate a DDoS attack

import numpy as np # Import the NumPy library and give it the alias ‘np’
packets_per_second = np.array([1000, 50, 100, 120, 500, 115000]) # Calculate the average (mean) number of packets per second
print(“Average packets per second:”, np.mean(packets_per_second)) # Print the calculated average with a descriptive message

import numpy as np
packets_per_second = np.array([1000, 50, 100, 120, 500, 115000])
print("Average packets per second:", np.mean(packets_per_second))

Cybersecurity – Example 2 (Login Attempts Monitoring)

You use the np.mean() function to track failed login attempts to detect brute force attacks

import numpy as np # Import the NumPy library and give it the alias ‘np’
failed_logins = np.array([10, 2, 0, 1, 1, 0,4]) # Calculate the average (mean) number of failed login
print(“Average failed logins per hour:”, np.mean(failed_logins)) # Print the calculated average with a descriptive message

import numpy as np
failed_logins = np.array([10, 2, 0, 1, 1, 0,4])
print("Average failed logins per hour:", np.mean(failed_logins))

Cybersecurity – Example 3 (CPU/Memory Usage Monitoring)

You use the np.mean() function to track failed login attempts to detect unusual resource usage

import numpy as np # Import the NumPy library and give it the alias ‘np’
high_usage = np.array([2, 8, 10, 95, 10]) # Calculate the average (mean) number of failed login
print(“Average CPU usage:”, np.mean(high_usage)) # Print the calculated average with a descriptive message

import numpy as np
high_usage = np.array([2, 8, 10, 95, 10])
print("Average CPU usage:", np.mean(high_usage))