I am having difficulties trying to generate a specific pattern that would work for any square matrix with any square dimension using NumPy
For example:
User input: n = 3
Output:
[[1 2 0] [2 3 2] [0 2 1]]
User input: n = 5
Output:
[[1 2 3 0 0] [2 3 4 0 0] [3 4 5 4 3] [0 0 4 3 2] [0 0 3 2 1]]
User input: n = 8
Output:
[[1 2 3 4 5 0 0 0] [2 3 4 5 6 0 0 0] [3 4 5 6 7 0 0 0] [4 5 6 9 8 7 6 5] [5 6 7 8 9 6 5 4] [0 0 0 7 6 5 4 3] [0 0 0 6 5 4 3 2] [0 0 0 5 4 3 2 1]]
Since a square matrix can be generated with any number in the form of (n x n), there would be instances where the user input is an odd number, how would I start figuring out the equations needed to make this work?
I got this going on but I was only able to do it on one corner of the matrix, any suggestion or idea is appreciated, thank you!
def input_number(n): matrix = np.zeros(shape=(n, n), dtype=int) for y in range(round(n // 2) + 1): for x in range(round(n // 2) + 1): matrix[y, x] = x + y + 1 y += 1
Input: n = 4
Output:
[[1 2 3 0 0] [2 3 4 0 0] [3 4 5 0 0] [0 0 0 0 0] [0 0 0 0 0]]
Advertisement
Answer
I looked around a bit more and was eventually able to pull it off, here’s my take on it.
import numpy as np def input_number(n): matrix = np.zeros(shape=(n, n), dtype=int) for y in range(round(n // 2) + 1): for x in range(round(n // 2) + 1): matrix[y, x] = y + x + 1 matrix[(n - y) - 1][(n - x) - 1] = matrix[y, x] print(matrix) input_number(n)
Input: 3
Output:
[[1 2 0] [2 3 2] [0 2 1]]
Input: 5
Output:
[[1 2 3 0 0] [2 3 4 0 0] [3 4 5 4 3] [0 0 4 3 2] [0 0 3 2 1]]
Input: 8
Output:
[[1 2 3 4 5 0 0 0] [2 3 4 5 6 0 0 0] [3 4 5 6 7 0 0 0] [4 5 6 9 8 7 6 5] [5 6 7 8 9 6 5 4] [0 0 0 7 6 5 4 3] [0 0 0 6 5 4 3 2] [0 0 0 5 4 3 2 1]]