Numpy-й способ построения полиномиального массива из множества точек - PullRequest
1 голос
/ 05 марта 2012

Я работаю над Полиномиальным Преобразованием для домашнего задания.Я использую документ из vanderbilt.edu в качестве отправной точки. Полиномиальное преобразование

У меня есть набор точек:

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-й способ создания такого массива?

Ответы [ 2 ]

2 голосов
/ 05 марта 2012

Конечно!Просто делайте то, что вы уже делаете, но не включайте понимание списка ...

Например

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 голос
/ 05 марта 2012

Вы также можете взглянуть на более общее ядро ​​полиномиального расширения, такое как то, которое находится в MDP toolkit

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