Как нарисовать знак плюс ( ) в n * n массиве numpy zero

#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. Как насчет массива четного размера 😉