처음에는 stackoverflow에 대한 놀라운 작업에 대해 모두들 감사드립니다 ... 여러분들은 놀라워하고 이미 꽤 많은 시간을 내게 도와 줬습니다. 내 문제에 대해서 : 나는 vectorfield 플롯하면 내가 (VectorX, VectorY, StartingpointX, StartingpointY) 형식으로 벡터의 시리즈를파이썬의 벡터 필드에 다항식 함수 피팅
data = [(-0.15304757819399128, -0.034405679205349315, -5.42877197265625, 53.412933349609375), (-0.30532995491023485, -0.21523935094046465, -63.36669921875, 91.832427978515625), (-0.15872430479453215, -0.077999419482978283, -67.805389404296875, 81.001983642578125), (-0.36415549211687903, -0.33757147194808113, -59.015228271484375, 82.976226806640625), (0.0, 0.0, 0.0, 0.0), (-0.052973530805275004, 0.098212384392411423, 19.02667236328125, -13.72125244140625), (-0.34318724086483599, 0.17123742336019632, 80.0394287109375, 108.58499145507812), (0.19410169197834648, -0.17635303976555861, -55.603790283203125, -76.298828125), (-0.38774018337716143, -0.0824692384322816, -44.59942626953125, 68.402496337890625), (0.062202543524108478, -0.37219011831012949, -79.828826904296875, -10.764404296875), (-0.56582988168383963, 0.14872365390732512, 39.67657470703125, 97.303192138671875), (0.12496832467900276, -0.12216653754859408, 24.65948486328125, -30.92584228515625)]
그것은 다음과 같습니다
import numpy as np
import matplotlib.pyplot as plt
def main():
# Format Data...
numdata = len(data)
x = np.zeros(numdata)
y = np.zeros(numdata)
u = np.zeros(numdata)
v = np.zeros(numdata)
for i,el in enumerate(data):
x[i] = el[2]
y[i] = el[3]
# length of vector
z[i] = math.sqrt(el[0]**2+el[1]**2)
u[i] = el[0]
v[i] = el[1]
# Plot
plt.quiver(x,y,u,v)
# showing the length with color
plt.scatter(x, y, c=z)
plt.show()
main()
전체 영역에 대해 연속적인 벡터 필드에 맞게 다항식 함수를 만들려고합니다. 몇 가지 연구 끝에 2 차원으로 다항식을 피팅하는 다음 함수를 발견했습니다. 문제는 장착 된 값에 대해 하나의 값만 허용한다는 것입니다.
def polyfit2d(x, y, z, order=3):
ncols = (order + 1)**2
G = np.zeros((x.size, ncols))
ij = itertools.product(range(order+1), range(order+1))
for k, (i,j) in enumerate(ij):
G[:,k] = x**i * y**j
m, _, _, _ = np.linalg.lstsq(G, z)
return m
def polyval2d(x, y, m):
order = int(np.sqrt(len(m))) - 1
ij = itertools.product(range(order+1), range(order+1))
z = np.zeros_like(x)
for a, (i,j) in zip(m, ij):
z += a * x**i * y**j
return z
또한 벡터의 1 차원 길이에 맞추려고 시도했을 때 polyval2d에서 반환 된 값은 완전히 꺼져있었습니다. 누구든지 눈금의 모든 점에 대해 벡터 (x, y)를 반환하는 맞춤 함수를 얻는 방법을 알고 있습니까?
감사합니다.
작동합니다. polyval에서 발견 한 버그는 좋은 힌트였습니다. 고맙습니다! – Martin