Используйте маску numpy, чтобы определить индексы для imshow - PullRequest
1 голос
/ 17 апреля 2020

Используя приведенный ниже небольшой воспроизводимый пример, я создаю маску, которую затем хотел бы программно определить минимальные и максимальные индексы х и у, где маска ложна (т. Е. Где значения не маскируются). В этом и более широком примере «реального мира» маскированные значения всегда будут пространственно непрерывными - в маске нет «островков». Цель состоит в том, чтобы использовать программно определенные индексы для увеличения немаскированных значений с помощью imshow. Я пытаюсь изобразить то, что я пытаюсь сделать, на изображении в конце поста.

import numpy as np
import matplotlib.pyplot as plt

# Generate a large array
arr1 = np.random.rand(100,100)

# Generate a smaller array that will help 
# set the mask used below
arr2 = np.random.rand(20,10) + 1

# Insert the smaller array into the larger 
# array for demonstration purposes
arr1[60:80,10:20] = arr2

# boost a few values neighboring the inserted array for demonstration purposes
arr1[59,12] += 2
arr1[70:75,20] += 2
arr1[80,13:16] += 2
arr1[64:72,9] += 2

# For demonstration, plot arr1
fig, ax = plt.subplots(figsize=(20, 15))
im = ax.imshow(arr1)
plt.show()

# Generate a mask with an example condition
mask = arr1 < 1

Используя маску, как определить, какие значения x_min, x_max, y_min и & y_max в следующей строке кода должно быть

im = ax.imshow(arr1[y_min:y_max, x_min:x_max])

таким образом, чтобы изображение было увеличено до красной рамки на следующем рисунке? Пока у меня нет пересеченных проводов, я думаю, что ответ для этого небольшого примера будет y_min = 59, y_max = 80, x_min = 9, & x_max = 20 small_examp

1 Ответ

1 голос
/ 17 апреля 2020

Следующий код должен работать:

y, x = np.where(~mask)  # ~ negates the boolean array
x_min = x.min()
x_max = x.max()
y_min = y.min()
y_max = y.max()
plt.imshow(arr1[y_min:y_max+1, x_min:x_max+1])

Plot from above code

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