Numpy-y从一组点构建多项式数组的方法

时间:2012-03-05 02:44:40

标签: python numpy image-processing

我正在进行多项式变换以完成家庭作业。我正在使用vanderbilt.edu的文档作为我的起点。 Polynomial Transform

我有一套要点:

square_points = (
    # x, y
    (37, 44 ),  # x1,y1
    (67, 74 ),  # x2,y2
    (97,104 ),  # x3,y3
    (247,194),  # x4,y4
    (157, 97),  # x5,y5
)

我想变成Numpy数组,行作为多项式:

[[1, x1, y1, x1*y1],
 [1, x2, y2, x2*y2],
 [1, x3, y3, x3*y3],
 [1, x4, y4, x4*y4],
 [1, x5, y5, x5*y5]]

我还在学习Numpy。我想学习一种从我的点列表中构建这样一个数组的简洁方法。 (与从硬编码的square_points [0] [1]等构建数组相反)

到目前为止,我有:

P = np.ones((5,5))
P[:,1] = [ n[0] for n in square_points ]
P[:,2] = [ n[1] for n in square_points ]
P[:,3] = [ n[0]*n[1] for n in square_points ]
这似乎有点麻烦。是否有更清洁,更Numpy-y的方式来创建这样的阵列?

2 个答案:

答案 0 :(得分:2)

当然!做你正在做的事情,但忽略列表理解......

E.g。

import numpy as np
square_points = np.array([
    [37,  44],  # x1,y1
    [67,  74],  # x2,y2
    [97,  104], # x3,y3
    [247, 194], # x4,y4
    [157, 97],  # x5,y5
    ])
x, y = square_points.T

P = np.ones((5,4))
P[:,1] = x
P[:,2] = y
P[:,3] = x * y

或者如果您愿意,您甚至可以在一行中完成:

P[:,1:] = np.array([x, y, x*y]).T

答案 1 :(得分:1)

您还可以查看更通用的多项式扩展内核,例如MDP toolkit

中的内容。