Create a 2D Symmetric Array Subclass

A symmetric array has the same values across its diagonal axis, meaning the value at the i-th row and j-th column is equal to the value at the j-th row and i-th column. Symmetric arrays are useful in linear algebra, network analysis, and graph theory. NumPy offers various methods to create a 2D symmetric array, which are as follows:

1. Using “np.triu()” and “np.tril()”:

Here, we first import the NumPy library and assign it the alias np. The symmetric_array function takes a NumPy array arr as input and returns a new array that is symmetric along its diagonal. It uses np.triu() to extract the upper triangular part of the input array. It then uses np.tril() to extract the lower triangular part of the transposed array (excluding the diagonal) by passing the transpose of the input array arr.T and a value of -1 for k, which means that the diagonal elements are excluded. Finally, the function adds the upper and lower triangular parts together to create a symmetric array. The resulting array has the same shape as the input array, and each element Z[i,j] is equal to Z[j,i]. The code includes an example usage of the function.

2. Using “np.triu_indices()” and “np.tril_indices()”:

Here, we first import the NumPy library and assign it the alias np. The symmetric_array function takes a square NumPy array arr as input and returns a new array sym_arr that is symmetric along its diagonal, creating an empty array sym_arr with the same shape as the input array. It then uses np.triu_indices() to get the indices of the upper triangular part of the array, and sets those values in the sym_arr using the np.ndarray.__setitem__() method. Next, it uses np.tril_indices() to get the indices of the lower triangular part of the transposed array (i.e., the diagonal values are excluded), and sets those values in the sym_arr using np.ndarray.__setitem__() method. Finally, it returns the resulting symmetric array sym_arr. The code includes an example usage of the function.