Проверка на одинаковость между массивами разных размеров: «DeprecationWarning: поэлементное сравнение не удалось; в будущем возникнет ошибка» - PullRequest
1 голос
/ 09 марта 2020

Я имею дело с изображениями. В конвейере может быть возвращено либо оригинальное изображение, либо отредактированное изображение. Чтобы еще больше усложнить ситуацию, возвращаемое изображение может иметь одинаковую форму, поэтому проверка на одинаковую форму не является подходящей go. Я хочу выполнить различные шаги в зависимости от того, возвращается ли оригинальное / отредактированное изображение. Если я использую знак ==, он каждый раз возвращает предупреждение:

DeprecationWarning: поэлементное сравнение не удалось; в будущем это вызовет ошибку

Воспроизведите предупреждение, используя этот код:

import numpy as np

picture_1 = np.random.randint(0, 256, (100, 100, 3))
picture_2 = picture_1[10:-10, 10:-10]

print(picture_1 == picture_2)

Итак, как мне проверить на равенство с массивами другой размер?

Обратите внимание, что существующие ответы на этот вопрос были направлены только на то, чтобы избежать сравнения. В моем случае сравнение целенаправленное.

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Numpy '== предназначен для сравнения значений, поэтому это не путь к go.
Если я правильно понял, я думаю, что вы ищете, это numpy.ndarray.base.

import numpy as np

picture_1 = np.random.randint(0, 256, (100, 100, 3))
picture_2 = picture_1[10:-10, 10:-10]

print(picture_2.base is picture_1) # True

Как сказано в официальном c, этот код проверяет, является ли picture_2 основанным на picture_1. Другими словами 'numpy', он проверяет, является ли picture_2 view из picture_1.


Или, возможно, вы хотите использовать base как-то так?
Это проверяет, является ли основа picture_1, с которой была обрезана picture_2 (по значению), такой же, как picture_0.

import numpy as np

picture_0 = np.random.randint(0, 256, (100, 100, 3))
picture_1 = np.copy(picture_0)
picture_2 = picture_1[10:-10, 10:-10]
picture_1_mod = np.copy(picture_0)+1 # mod means modified.
picture_2_mod = picture_1_mod[10:-10, 10:-10]

print(picture_2.base == picture_0) # Array of Trues
print(picture_2_mod.base == picture_0) # Array of Falses
0 голосов
/ 09 марта 2020

Я бы рекомендовал сначала проверить на равенство формы, а затем на равенство элементов, если формы равны. В конечном счете, если формы не равны, второе сравнение никогда не будет полезным.

import numpy as np

picture_1 = np.random.randint(0, 256, (100, 100, 3))
picture_2 = picture_1[10:-10, 10:-10]

print(np.shape(picture_1)==np.shape(picture_2))
if np.shape(picture_1)==np.shape(picture_2):
    print(picture_1 == picture_2)

Если я неправильно понимаю и все еще пытаюсь избежать сравнения, уточните, пожалуйста?

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