#python #arrays #numpy
#python #массивы #numpy
Вопрос:
Как мы можем заменить элементы массива NumPy размером (n * n), если у нас есть массив np.zeros и нам нужно заменить его на 1, чтобы форма выглядела как ‘ ‘, так что 1 должны присутствовать в средней строке и столбце.
import numpy as np
x = np.zeros(5*5).reshape(5,5)
x[2:3,2:3] = 1
вывод:
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
но ожидается, что:
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[1, 1, 1, 1, 1],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0]
Комментарии:
1. Эти фрагменты не совсем правильные. Используйте
x=np.zeros((5,5)); x[2,1:4]=1; x[1:4,2]=1
2. Заголовок вашего вопроса слишком общий
Ответ №1:
Вы можете выполнить свою задачу следующим образом:
n = x.shape[0] // 2
x[n, n-1:n 2] = 1
x[n-1:n 2, n] = 1
Я создал массив, передающий dtype=’int’ и получил:
array([[0, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 1, 1, 1, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0]])
(целые числа).
Или, если вы хотите иметь 1 во всех элементах среднего столбца и строки, выполните:
x[n, :] = 1
x[:, n] = 1
На этот раз вы получите:
array([[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[1, 1, 1, 1, 1],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0]])
Редактировать после комментария о массиве четного размера
В случае массива четного размера вы можете использовать точно такой же код, но на этот раз «крест» находится не точно посередине.
Например, если массив имеет значение 6 * 6
, результат будет:
array([[0, 0, 0, 1, 0, 0],
[0, 0, 0, 1, 0, 0],
[0, 0, 0, 1, 0, 0],
[1, 1, 1, 1, 1, 1],
[0, 0, 0, 1, 0, 0],
[0, 0, 0, 1, 0, 0]])
Или, если вы принимаете крест «двойной» ширины (2 средних строки и столбца),
вы можете запустить:
n = x.shape[0] // 2
x[n-1:n, :] = 1
x[:, n-1:n] = 1
На этот раз результат будет:
array([[0, 0, 1, 1, 0, 0],
[0, 0, 1, 1, 0, 0],
[1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1],
[0, 0, 1, 1, 0, 0],
[0, 0, 1, 1, 0, 0]])
Если вы заранее не знаете форму массива, вы должны проверить
является ли количество строк четным или нечетным, а затем запустите подходящий
версия моего кода (обе версии в блоке if / else).
Комментарии:
1. Как насчет массива четного размера 😉