将通用转换应用于numpy数组

时间:2018-10-03 18:01:01

标签: python numpy

是否有简单的方法将通用转换应用于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 :(得分:0)

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]
])

答案 1 :(得分:-2)

您正在添加不必要的额外步骤。您只需使用数组T来调用函数T(ar)。没有数组方法可以调用整个数组,因为您只是将数组作为参数传递给另一个函数。

如果要执行常规的 element-wise 功能,请参见:https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.vectorize.html