Применить универсальное преобразование к массиву numpy - PullRequest
0 голосов
/ 03 октября 2018

Есть ли простой способ применить универсальное преобразование к массиву numpy?

как ДЛЯ ПРИМЕРА это преобразование

def T(x,y):
    return (y, x) # just an example

ar = np.array([
    [1, 2, 3, 4],
    [1, 2, 3, 4],
    [1, 2, 3, 4],
    [1, 2, 3, 4],
])

ar.transform(T)

ar == np.array([
    [1, 1, 1, 1],
    [2, 2, 2, 2],
    [3, 3, 3, 3],
    [4, 4, 4, 4],
])

https://en.wikipedia.org/wiki/Transformation_(function)

Ответы [ 2 ]

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

scipy.ndimage.geometric_transform - это то, что вам нужно

def T(p):
    return (p[1], p[0]) # just an example

ar = numpy.array([
    [1, 2, 3, 4],
    [1, 2, 3, 4],
    [1, 2, 3, 4],
    [1, 2, 3, 4],
])

ar = scipy.ndimage.geometric_transform(ar,T)

ar == numpy.array([
   [1, 1, 1, 1],
   [2, 2, 2, 2],
   [3, 3, 3, 3],
   [4, 4, 4, 4]
])
0 голосов
/ 03 октября 2018

Вы добавляете ненужный дополнительный шаг.Вы можете просто вызвать вашу функцию T с массивом как: T(ar).Не существует метода-массива, который можно было бы вызвать для всего массива, поскольку вместо этого вы просто передавали бы массив в качестве аргумента другой функции.

Если вы хотите сделать общий поэлементно *Функция 1006 *, см .: https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.vectorize.html

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