Что нужно сделать, чтобы код заработал правильно?

Как создать массив `arr` размером (10, 10) с типом данных np.int8, заполненный нулями, и затем получить массив `new_arr`, который будет иметь внутренний отступ сверху в одну строку, снизу три строки, справа две строки и слева четыре строки? Вам нужно использовать только срезы. При этом, после выполнения операций, нужно, чтобы вывод был похожим на изображение. Как решить ошибку "could not broadcast input array from shape (10,10) into shape (6,4)"?
  • 16 июля 2024 г. 17:42
Ответы на вопрос 2
Для правильной работы кода нужно использовать библиотеку NumPy, импортировав её и создав массив с помощью функции `np.zeros`. 

Вот код, который создает массив `arr` и получает массив `new_arr`:

```python
import numpy as np

arr = np.zeros((10, 10), dtype=np.int8)

new_arr = arr[1:-3, 4:-2] 
print(new_arr)
```

Чтобы исправить ошибку "could not broadcast input array from shape (10,10) into shape (6,4)", нужно убедиться, что размер исходного массива `arr` соответствует размеру среза `new_arr`. В данном случае, срез `new_arr` имеет размер (6, 4), поэтому мы берем часть исходного массива `arr`, которая соответствует этому размеру, используя правильные значения срезов.
Ты пытаешься делать выборку среза с заполнением. new_arr = arr[1:-3, 4:-2] = arr1 глупость, это так не работает. 

arr = np.ones((10,10), dtype = np.int8)  
new_arr = arr.copy()
new_arr[0, :] = 0                   
new_arr[:, :4] = 0                  
new_arr[:, -2:] = 0                 
new_arr[-3:, :] = 0                 
print(new_arr)
Или если хочешь короче я исходил из твоего кода, то можно вот так.
new_arr = np.zeros((10, 10))
new_arr[1:7, 4:-2] = 1
Так короче, и правильнее но мы не много нарушаем условие задачи. Мы заполняем единицами выбранный срез.
Похожие вопросы