For example, given matrix
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
it should return
array([[1. , 0.91465912, 0.87845859],
[0.91465912, 1. , 0.99663684],
[0.87845859, 0.99663684, 1. ]])
where the (i, j) entry of the result is the cosine similarity between the row vector arr[i] and the row vector arr[j]: cos_sim[i, j] == CosSim(arr[i], arr[j]).
As usual, the cosine similarity between two vectors , is defined as:

This function should return a np.ndarray of shape (arr.shape[0], arr.shape[0])
