Использование ndimage.interpolation.affine_transform для преобразования матрицы - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь перевести простую матрицу, используя ndi.interpolation.affine_transform, но полученный результат меняется на противоположный.Например:

import scipy.ndimage as ndi
m = [[1, 1, 11], [2, 2, 22], [3, 3, 33]]
final_affine_matrix = [[1, 0], [0, 1]]
final_offset = [0, 1]
x = ndi.interpolation.affine_transform(
        m,
        final_affine_matrix,
        final_offset,
        order=1,
        mode='nearest',
        cval=0)
print(x)

[[ 1 11 11]
 [ 2 22 22]
 [ 3 33 33]]

Учитывая, что смещение равно [0, 1], разве не должна быть смещена ось Y, а не ось X?То есть, если результат не будет:

[[ 2  2 22]
 [ 3  3 33]
 [ 3  3 33]]

Я могу достичь этого результата, но только со смещением [1, 0].Разве они не должны быть наоборот?

1 Ответ

0 голосов
/ 03 октября 2018

Как указано в документации , scipy.ndimage.affine_transform() вычисляет новую позицию, выполнив: np.dot(matrix, o) + offset (где o - позиция вывода).

Это означает, что следующеетесты должны пройти успешно:

m = np.array(m)
assert(m[0, 1] == x[0, 0])
assert(m[0, 2] == x[0, 1])
assert(m[1, 1] == x[1, 0])
assert(m[1, 2] == x[1, 1])
assert(m[2, 1] == x[2, 0])
assert(m[2, 2] == x[2, 1])

или, более кратко:

assert(np.all(m[:, 1] == x[:, 0]))
assert(np.all(m[:, 2] == x[:, 1]))

, и они пройдут, как и ожидалось.Таким образом, матрица действительно смещается на 1 -индекс.Возможно, вы ожидали другую матрицу как вывод, потому что вы были смущены печатным выводом.Нулевой индекс обозначает строки, первый - столбцы.Следовательно, смещение по первому индексу сместит столбцы.

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