NumPy is a mighty Python library, which adds support for multi-dimensional arrays and matrices besides many efficient mathematical functions. I have some handy new tricks using this library that I want to share with you. In this post, I will show how to operate with matrix triangles using NumPy easily.
So, let’s start creating a 4×4 matrix:
In: my_matrix = np.arange(16).reshape(4, 4)
Out: array([ 0, 1, 2, 3],
[ 4, 5, 6, 7,],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
We can easily get the diagonal of the matrix, using the diagonal method:
In: my_matrix.diagonal()
Out: array([[ 0, 5, 10, 15])
Then, the most important step is to apply the function np.tril_indices to get the indices related to the matrix\’s diagonals. We also used the “k=1” option to exclude the diagonal terms.
In: tril_my_matrix = np.tril_indices(my_matrix.diagonal().size, k=-1)
Out: (array([[ 1, 2, 2, 3, 3, 3]), array([0, 0, 1, 0, 1, 2]))
Once we obtained the indices for both lower and upper triangles, we can select these items in the matrix. For the lower triangle, we have:
In: my_matrix[tril_my_matrix[0], tril_my_matrix[1]]
And for the upper triangle:
In: my_matrix[tril_my_matrix[1], tril_my_matrix[0]]
Out: array([ 1, 2, 6, 3, 7, 11])
And to finish it, we can unpack the triangles in a zero matrix to easily create new triangle matrices:
In: zero_matrix = np.zeros((4, 4))
Out: array([[ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.]])
Note that we apply the method copy() when copying items in an array. It is needed when we want to keep the original list unchanged after the new list is modified. We applied the indices obtained to select only the items of the triangles.
In: lower_triangle = zero_matrix.copy() lower_triangle[tril_my_matrix[0], tril_my_matrix[1]] = my_matrix[tril_my_matrix[0], tril_my_matrix[1]].copy()
Out: array([[ 0., 0., 0., 0.], [ 4., 0., 0., 0.], [ 8., 9., 0., 0.], [12.,13.,14., 0.]])
In: upper_triangle = zero_matrix.copy() upper_triangle[tril_my_matrix[1], tril_my_matrix[0]] = my_matrix[tril_my_matrix[1], tril_my_matrix[0]].copy()
Out: array([[ 0., 1., 2., 3.],
[ 0., 0., 6., 7.],
[ 0., 0., 0.,11.],
[ 0., 0., 0., 0.]])
That’s it! It seems so simple now, isn’t it? If you have any questions or suggestions, just leave a comment!
The Jupyter Notebook version of this tutorial can be found in NbViewer!
Best regards and stay safe!
Pingback: Off-White x Air Max 97 OG 'Black' Reps
Pingback: Fake Yeezy Boost 350 V2 'Lundmark'
Pingback: Travis Scott x Air Jordan 1 Low 'Mocha' Reps
Pingback: https://www.giftspresentsforhim.com
Pingback: https://www.hkbirthdaygiftsforhim.com
Pingback: z16 bet มีข้อดี-ข้อเสีย อย่างไรบ้าง
Pingback: เช่ารถตู้พร้อมคนขับ
Pingback: dark168
Pingback: พอต ราคาส่ง
Pingback: สล็อตค่าย pg เกมใหม่ๆ
Pingback: โบท็อกราคา
Pingback: โคมไฟ