= 0 and x + deltaX < N and y + deltaY >= 0 and deltaY < N: matrix[x + deltaX, y + deltaY] += 0.2 for deltaX in range(-1, 2): for deltaY in range(-1, 2): if x + deltaX >= 0 and x + deltaX < N and y + deltaY >= 0 and y + deltaY < N: matrix[x + deltaX, y + deltaY] += 0.3 matrix[x, y] += 0.5 for i in range(N): "> = 0 and x + deltaX < N and y + deltaY >= 0 and deltaY < N: matrix[x + deltaX, y + deltaY] += 0.2 for deltaX in range(-1, 2): for deltaY in range(-1, 2): if x + deltaX >= 0 and x + deltaX < N and y + deltaY >= 0 and y + deltaY < N: matrix[x + deltaX, y + deltaY] += 0.3 matrix[x, y] += 0.5 for i in range(N): "> = 0 and x + deltaX < N and y + deltaY >= 0 and deltaY < N: matrix[x + deltaX, y + deltaY] += 0.2 for deltaX in range(-1, 2): for deltaY in range(-1, 2): if x + deltaX >= 0 and x + deltaX < N and y + deltaY >= 0 and y + deltaY < N: matrix[x + deltaX, y + deltaY] += 0.3 matrix[x, y] += 0.5 for i in range(N): ">
import numpy as np

def openFile():
    filename = "ex5_data.txt"

    try:
        with open(filename, 'r') as file:
            content = file.read()
            return content
    except FileNotFoundError:
        print(f"File '{filename}' not found.")
    except Exception as e:
        print(f"An error occured: {e}")

def numpyVersion(N, data):
    matrix = np.zeros((N, N))

    for spotlight in data:
        x = int(spotlight.split()[0])
        y = int(spotlight.split()[1])

        for deltaX in range(-2, 3):
            for deltaY in range(-2, 3):
                if x + deltaX >= 0 and x + deltaX < N and y + deltaY >= 0 and deltaY < N:
                    matrix[x + deltaX, y + deltaY] += 0.2

        for deltaX in range(-1, 2):
            for deltaY in range(-1, 2):
                if x + deltaX >= 0 and x + deltaX < N and y + deltaY >= 0 and y + deltaY < N:
                    matrix[x + deltaX, y + deltaY] += 0.3

        matrix[x, y] += 0.5

    for i in range(N):
        for j in range(N):
            print(f"{matrix[i, j]:.1f} ", end = "")
        print()

def main():
    fileContent = openFile()

    N = int(fileContent.split('\\n')[0])
    data = fileContent.split('\\n')[1:]

    numpyVersion(N, data)

if __name__ == "__main__":
    main()

The openFile() function

def openFile():
    filename = "ex5_data.txt"

    try:
        with open(filename, 'r') as file:
            content = file.read()
            return content
    except FileNotFoundError:
        print(f"File '{filename}' not found.")
    except Exception as e:
        print(f"An error occured: {e}")

The numpyVersion(N, data) function

def numpyVersion(N, data):
    matrix = np.zeros((N, N))

    for spotlight in data:
        x = int(spotlight.split()[0])
        y = int(spotlight.split()[1])

        for deltaX in range(-2, 3):
            for deltaY in range(-2, 3):
                if x + deltaX >= 0 and x + deltaX < N and y + deltaY >= 0 and y + deltaY < N:
                    matrix[x + deltaX, y + deltaY] += 0.2

        for deltaX in range(-1, 2):
            for deltaY in range(-1, 2):
                if x + deltaX >= 0 and x + deltaX < N and y + deltaY >= 0 and y + deltaY < N:
                    matrix[x + deltaX, y + deltaY] += 0.3

        matrix[x, y] += 0.5

    for i in range(N):
        for j in range(N):
            print(f"{matrix[i, j]:.1f} ", end = "")
        print()

This is where the main action happens. Let’s break down the logic:

  1. Create a 2D NumPy array:

    matrix = np.zeros((N, N))
    
  2. Loop over each spotlight:

    for spotlight in data:
    	x = int(spotlight.split()[0])
      y = int(spotlight.split()[1])
    
  3. Add 0.2 intensity in a 5 x 5 region:

    for deltaX in range(-2, 3):
                for deltaY in range(-2, 3):
                    if x + deltaX >= 0 and x + deltaX < N and y + deltaY >= 0 and y + deltaY < N:
                        matrix[x + deltaX, y + deltaY] += 0.2
    
  4. Add 0.3 intensity in a 3 x 3 region:

    for deltaX in range(-1, 2):
                for deltaY in range(-1, 2):
                    if x + deltaX >= 0 and x + deltaX < N and y + deltaY >= 0 and y + deltaY < N:
                        matrix[x + deltaX, y + deltaY] += 0.3
    
  5. Add 0.5 intensity to the spotlight’s own tile:

    matrix[x, y] += 0.5
    
  6. Print the matrix:

    for i in range(N):
            for j in range(N):
                print(f"{matrix[i, j]:.1f} ", end = "")
            print()
    

What’s the big idea?