我正在进行多项式变换以完成家庭作业。我正在使用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的方式来创建这样的阵列?
答案 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
中的内容。