Как отменить или отменить np.meshgrid? - PullRequest
0 голосов
/ 20 ноября 2018

В задаче интерполяции изменения размера изображения можно использовать np.meshgrid для индексов строк и столбцов, прежде чем работать с сетчатыми индексами:

nrows = 600
ncols = 800
image_in = np.random.randint(0, 256, size=(nrows, ncols, 3))
scale_factor = 1.5

r = np.arange(nrows, dtype=float) * scale_factor
c = np.arange(ncols, dtype=float) * scale_factor

rr, cc = np.meshgrid(r, c, indexing='ij')

# Nearest Neighbor Interpolation
# np.floor if scale_factor >= 1. np.ceil otherwise
rr = np.floor(rr).astype(int).clip(0, nrows-1)
cc = np.floor(cc).astype(int).clip(0, ncols-1)

image_out = image_in[rr, cc, :]

Теперь, как бы я изменил этот процесс?Скажем, учитывая rr_1, cc_1 (произведение np.meshgrid), которое обрабатывается неизвестным образом (здесь показано np.random.randint), как мне получить r_1 и c_1, то есть входные данные дляnp.meshgrid (желательно с индексированием ij)?

# Suppose rr_1, cc_1 = np.meshgrid(r_1, c_1, indexing='ij')
rr_1 = np.random.randint(0, nrows, size=(nrows, ncols, 3))
cc_1 = np.random.randint(0, ncols, size=(nrows, ncols, 3))

r_1 = ?
c_1 = ?

ОБНОВЛЕНИЕ:

Я понял это сразу после публикации.Ответ:

# Suppose rr_1, cc_1 = np.meshgrid(r_1, c_1, indexing='ij')
rr_1 = np.random.randint(0, nrows, size=(nrows, ncols, 3))
cc_1 = np.random.randint(0, ncols, size=(nrows, ncols, 3))

r_1 = rr_1[:, 0]
c_1 = cc_1[0]

1 Ответ

0 голосов
/ 20 ноября 2018

numpy.meshgrid создает массив более высоких измерений из входных массивов для создания решетчатых массивов.Итак, представьте, что вы хотите получить двумерную сетку, используя входные одномерные векторы r и c.numpy.meshgrid возвращает rr и cc как двумерные массивы, которые соответственно сохраняют постоянную ось y или ось x везде в двумерном массиве (именно поэтому это сетка).

Вот тестовый пример:

import numpy as np

r = np.arange(5)      # [0 1 2 3 4]
c = np.arange(5,10,1) # [5 6 7 8 9]

rr, cc = np.meshgrid(r,c,indexing='ij')

r_original = rr[:,0]
c_original = cc[0,:]

print(r_original)     # [0 1 2 3 4]
print(c_original)     # [5 6 7 8 9]

Обратите внимание, что сетки, которые мы создали для rr и cc, равны

rr = [[0 0 0 0 0]
      [1 1 1 1 1]
      [2 2 2 2 2]
      [3 3 3 3 3]
      [4 4 4 4 4]]

cc = [[5 6 7 8 9]
      [5 6 7 8 9]
      [5 6 7 8 9]
      [5 6 7 8 9]
      [5 6 7 8 9]]

Поскольку вы используете indexing='ij' в вашем случае, а двумерные массивытранспонировать.Следовательно, значения, которые содержат константу для rr и cc соответственно, являются осью x и осью y (в отличие от случая, когда вы не используете indexing='ij').

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