Почему img [0: overlap,:,:] = 1 работает, а в numpy, но не img = img [0: overlap,:,:] = 1 - нет? - PullRequest
0 голосов
/ 24 февраля 2020

Я создал массив нулей в numpy:

img = np.zeros((30, 30, 3), np.uint8)

Я бы хотел установить определенное значение в 1 с, используя переменную перекрытия. Это совпадение говорит мне, сколько столбцов в я хочу, чтобы 1 начались. Когда я пытаюсь сделать это таким образом

img = img[0:overlap,:,:] = 1

я получаю следующую ошибку:

TypeError: 'int' object does not support item assignment

Но когда я делаю это, все нормально:

 img[0:overlap,:,:] = 1

Я неправильно думать об этих объектах массива? Почему я не могу просто сбросить массив первым, присвоив его тому же массиву?

1 Ответ

2 голосов
/ 24 февраля 2020

Ах, это сложно.

Когда вы делаете это:

x = y = 42

Вы назначаете значение 42 для x и y. Но на практике x сначала присваивается его значение, а затем y присваивается то же значение. Итак, это сокращение для:

x = 42
y = 42

Теперь посмотрите на ваш код:

img = img[0:overlap,:,:] = 1

Это сокращение для:

img = 1
img[0:overlap,:,:] = 1

И, конечно, вы ' Согласитесь, что 1[0:overlap,:,:] не имеет смысла и правильно выбрасывает TypeError: 'int' object does not support item assignment.

Кстати, img[0:overlap, :, :] = 1 уже изменяет img, почему вы пытаетесь выполнить задание? Т.е.:

import numpy as np

overlap = 2
img = np.zeros((3, 4, 2), np.uint8)
img[0:overlap, :, :] = 1
print(img)

Результат:

[[[1 1]
  [1 1]
  [1 1]
  [1 1]]

 [[1 1]
  [1 1]
  [1 1]
  [1 1]]

 [[0 0]
  [0 0]
  [0 0]
  [0 0]]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...