## Instructions

**Objective**

## Requirements and Specifications

**Source Code
**

import numpy as np

def closest_point(A1, A2):

# Convert arrays to float64

A1 = A1.astype('float64')

A2 = A2.astype('float64')

# First, check that the number of columns in both arrays is the same

if A1.shape[1] != A2.shape[1]:

raise ValueError("Arrays must have the same number of columns")

# Compute the pair-wise difference between each row from A1 and A2

# Check if the matrices has same number of rows

if A1.shape[0] != A2.shape[0]:

diff = A1[np.newaxis,:,:]-A2[:,np.newaxis,:]

else:

diff = A1-A2

# Now compute the distance. The distance is calculated using the Euclidean Distance formula

dist = np.sqrt(np.sum(diff**2,axis=-1))

# Now, get the location of the minimum distance

loc = np.where(dist == dist.min())

if A1.shape[0] != A2.shape[0]:

pos = loc[1][0]

else:

pos = loc[0][0]

# The location contains two values: row and column. The row index

# is the point in A1 and the column index is the index in A2

return pos

# Test

if __name__ == '__main__':

# Generate two arrays of random numbers

#A1 = np.random.rand(150,2)

#A2 = np.random.rand(500,2)

A1 = np.array([[0,0],[1,1],[0,1],[1,0]])

A2 = np.array([[2,2],[2,3],[3,2],[3,3], [0.25,2]])

B1 = np.arange(10**6).reshape(10**4, 10**2)

B2 = np.array([0] * 10**6).reshape((10**4, 10**2))

# Compute

pos = closest_point(B1,B2)

print(pos)