Suppose I have:
arr1 = np.array([[1,2,3,4,5], [6,7,8,9,10], [11,12,13,14,15], [16,17,18,19,20], [21,22,23,24,25]])
And the empty matrix:
matrix = np.zeros((10, 10))
matrix[:] = np.NaN
I want to populate matrix
with each element within arr1
, but diagonally. This is the expected output:
array([[ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],
[ 1, nan, nan, nan, nan, nan, nan, nan, nan, nan],
[ 6, 2, nan, nan, nan, nan, nan, nan, nan, nan],
[ 11, 7, 3, nan, nan, nan, nan, nan, nan, nan],
[ 16, 12, 8, 4, nan, nan, nan, nan, nan, nan],
[ 21, 17, 13, 9, 5, nan, nan, nan, nan, nan],
[ nan, 22, 18, 14, 10, nan, nan, nan, nan, nan],
[ nan, nan, 23, 19, 15, nan, nan, nan, nan, nan],
[ nan, nan, nan, 24, 20, nan, nan, nan, nan, nan],
[ nan, nan, nan, nan, 25, nan, nan, nan, nan, nan]])
This is what I have tried so far without succeeding:
arr1 = np.array([[1,2,3,4,5], [6,7,8,9,10], [11,12,13,14,15], [16,17,18,19,20], [21,22,23,24,25]])
matrix = np.zeros((10, 10))
matrix[:] = np.NaN
for i, array in enumerate(arr1):
for row_matrix in matrix:
row_matrix = np.diag(array, -i-1)
break
This is the output I have from the above code:
array([[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 21, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 22, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 23, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 24, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 25, 0, 0, 0, 0, 0]])
Try:
for i, col in enumerate(arr1.T, 1):
matrix[i : i + len(col), i - 1] = col
print(matrix)
Prints:
[[nan nan nan nan nan nan nan nan nan nan]
[ 1. nan nan nan nan nan nan nan nan nan]
[ 6. 2. nan nan nan nan nan nan nan nan]
[11. 7. 3. nan nan nan nan nan nan nan]
[16. 12. 8. 4. nan nan nan nan nan nan]
[21. 17. 13. 9. 5. nan nan nan nan nan]
[nan 22. 18. 14. 10. nan nan nan nan nan]
[nan nan 23. 19. 15. nan nan nan nan nan]
[nan nan nan 24. 20. nan nan nan nan nan]
[nan nan nan nan 25. nan nan nan nan nan]]