Создание ромба из 0 в матрице 1 - numpyPython

Программы на Python
Ответить
Anonymous
 Создание ромба из 0 в матрице 1 - numpy

Сообщение Anonymous »

Итак, задание такое:
написать функцию, которая получает N (int больше 0) и возвращает 2-мерный массив единиц, где путь, равный 0, образует ромб. длина каждой ромбовидной линии (1 из 4 строк) имеет длину N. нельзя использовать компоновку списков циклов или рекурсию.
Я добавлю свое собственное решение, но я не думаю, что оно очень ориентировано на цифры.
Обратите внимание, что мое решение изначально было для ромба из 1 в матрице 0, поэтому оно может выглядеть немного странно.
пример:
n=1
np.array([[0]])

n=2:
np.array([[1,0,1],[0,1,0],[1,0,1]])

n=3
np.array([[1,1,0,1,1],[1,0,1,0,1],[0,1,1,1,0],[1,0,1,0,1],[1,1,0,1,1]])

Мое решение:
if n == 1:
finalMatrix = np.array([[0]])
return finalMatrix
rawMatrix = np.ones((2 * n - 1, 2 * n - 1))
midRowDiag = np.eye(2 * n - 1, k=n - 1)
midColDiag = np.eye(2 * n - 1, k=-(n - 1))
tempMatrix = rawMatrix - midRowDiag - midColDiag
halfMatrix = tempMatrix[::, n:]
# print(halfMatrix)

# Making the quarters
topRightQuart = halfMatrix[:n - 1, 0:n - 1]
topLeftQuart = np.fliplr(topRightQuart)
botLeftQuart = np.flipud(topLeftQuart)
botRightQuart = np.flipud(topRightQuart)
midCol = tempMatrix[:, n - 1]
midRow = tempMatrix[n - 1, :]
# Adding them all up
finalMatrix = np.zeros((2 * n - 1, 2 * n - 1))
finalMatrix[:, n - 1] += midCol
finalMatrix[n - 1, :] += midRow
finalMatrix[0:n - 1, 0:n - 1] += topLeftQuart
finalMatrix[0:n - 1, n:] += topRightQuart
finalMatrix[n:, 0:n - 1] += botLeftQuart
finalMatrix[n:, n:] += botRightQuart
finalMatrix[n - 1, n - 1] = 1
return finalMatrix


Подробнее здесь: https://stackoverflow.com/questions/726 ... trix-numpy
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»