Почему 2D-присваивание не работает должным образом в Numpy?

#python #numpy

#python #numpy

Вопрос:

У меня есть следующий код:

     for (old_point, new_point) in zip(masked_indices, masked_new_indices):
        row, col = old_point
        new_row, new_col = new_point
        
        new_img[row, col] = img[new_row, new_col]
  

Где new_img и img оба являются ndarrays 1024x1024x3, и masked_indices и masked_new_indices оба являются ndarrays 800×2.

Почему это утверждение не имеет такого же поведения?

     new_img[masked_indices] = img[masked_new_indices]
  

И есть ли способ оптимизировать этот for цикл в более простом стиле?

Ответ №1:

Я все понял. Поскольку new_img он трехмерный, я должен указать два индекса. Попытка использовать 2D-значение в одном индексе была причиной неожиданного поведения.

Это произвело тот эффект, к которому я стремился, хотя и не очень красиво:

 new_img[masked_indices[:, 0], masked_indices[:, 1], :] = img[masked_new_indices[:, 0], masked_new_indices[:, 1], :]