점 구름에 평면 맞추기 (3d)

친구

여러 열의 데이터를 포함하는 데이터 파일이 있습니다.이 데이터 파일에서 3 개의 열 (좌표를 나타내는)을 추출하여 다른 파일에 넣은 다음 새로 만든 파일을 사용하여 평면에 맞추거나 scipy.optimize.curve_fit을 사용하여 표면 (또는 당신이 부르고 싶은 무엇이든). 내 코드는 다음과 같습니다.

# -*- coding: utf-8 -*-

from pylab import *
import matplotlib.pyplot as plt 
import numpy as np
from scipy import stats
from scipy.optimize import curve_fit



### processing function    
def store(var,textfile):
    data=loadtxt(textfile,skiprows=1)
    p0=[]
    p1=[]
    p2=[]
    for i in range(0,len(data)):
        p0.append(float(data[i,2]))
        p1.append(float(data[i,3]))
        p2.append(float(data[i,4]))
    var.append(p0)
    var.append(p1)
    var.append(p2)

#extracting the data from a textfile
datafile1='cracks_0101005_5k_tensionTestCentreCrack_l0.001a0_r0.01.txt'
a1=[]
store(a1, datafile1)


rcParams.update({'legend.numpoints':1,'font.size': 20,'axes.labelsize':25,'xtick.major.pad':10,'ytick.major.pad':10,'legend.fontsize':14})
lw=2
ms=10

#fitting a surface(curve) into the data

def func(data, m, n, o): 
    return m*data[:,0] + n*data[:,2] + o 

guess=(1,1,1)

params, pcov = curve_fit(func, a1[::2, :2], a1[:,1], guess)
print (params)

그리고 다음과 같은 오류 메시지가 나타납니다.

Traceback (most recent call last):
  File "fitcurve.py", line 41, in <module>
    params, pcov = curve_fit(func, a1[::2, :2], a1[:,1], guess)
TypeError: list indices must be integers, not tuple

내가 뭘 잘못하고 있는지 말해 주시겠습니까?

좀 더 명확하게하기 위해 : Y를 내 종속 함수로 사용하려고하므로 X와 Z의 함수가 될 것입니다. 분명히 a1[]배열이 아니라 목록입니까? 그러나 배열로 변경해도 Myarray=np.asarray(a1)다른 이상한 메시지가 나타납니다. 누군가가 여기서 문제를 이해하도록 도와 주시면 감사하겠습니다.

건배

Mikuszefski

코드에서 발견 한 가능한 오류는 다음과 같습니다.

y함수 로 맞추고 싶으 x,z므로 보내려는 X배열은 아마도 a1[:, ::2]. 그러나 그것은 func이미 m,2배열을 얻었 으므로 여기에 return m*data[:,0] + n*data[:,1] + o여전히 있어야합니다. 나는 그것이 3이 아닌 2 개의 매개 변수가되어야한다고 생각합니다. m,n,o그 결과로부터 가능한 것을 계산할 수 있습니다 .

import matplotlib 
matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from matplotlib import style
from random import random
style.use('ggplot')

from scipy.optimize import curve_fit

""" make some data and save to file """
data=[]
a,b,s=1.233,-2.17,5.2
for i in range(88):
    x=10*(2*random()-1)
    y=10*(2*random()-1)
    z=a*x+b*y+s*(2*random()-1)*.5
    data+=[[x,y,z]]
data=np.array(data)
np.savetxt("data.txt", data)

""" get the data and use unpack to directly write into x,y,z variables"""
xData,yData,zData=np.loadtxt("data.txt", unpack=True)
"""...while I actally need the packed version as well, so I could load again"""
#allData=np.loadtxt("data.txt")
"""...or..."""
allData=np.array(zip(xData,yData,zData))


def func(data, m, o): 
    return m*data[:,0] + o*data[:,1] 


guess=(1,1)
params, pcov = curve_fit(func, allData[:, ::2], allData[:,1], guess)

""" showing data and fit result"""
x=np.linspace(-10,10,10)
y=np.linspace(-10,10,10)
X,Y=np.meshgrid(x,y)
Z=-params[0]/params[1]*X+1/params[1]*Y
fig1 = plt.figure(1)
ax=fig1.add_subplot(1,1,1, projection='3d')
ax.scatter(xData,yData,zData)
ax.plot_wireframe(X,Y,Z,color='#4060a6',alpha=.6)
ax.set_title("({:1.2f},{:1.2f})".format(-params[0]/params[1],1/params[1]))
plt.show()

검사 결과

당신이 장착 중에 있습니다 y=m*x+o*z내가의 와이어 프레임 그릴 z=a*x+b*yMIT의 b=1/o싶게 a=-m/o, 즉 n=1. m,n,o그에 따라 크기를 조정할 수 있습니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

3D 산점도에 평면을 추가하는 방법

분류에서Dev

Plotly의 3D 산점도에 회귀 평면 추가

분류에서Dev

특이 값 분해를 사용하여 점 집합에 평면 맞추기

분류에서Dev

Python : 3D 타원체 (편평 / 확장)를 3D 포인트에 맞추기

분류에서Dev

플롯의 점 0에 3D 표면 추가

분류에서Dev

R에 다차원 평면 맞추기

분류에서Dev

창에 초점 맞추기

분류에서Dev

창에 초점 맞추기

분류에서Dev

점에 곡선 맞추기

분류에서Dev

점진적 Convex Hull 3D 동안 한 지점에 대한 수평선 얻기

분류에서Dev

FiPy의 3D 변수에서 평면을 추출하는 방법 (3D에서 2D로)

분류에서Dev

2D 점 세트에 두 선 맞추기

분류에서Dev

Matlab의 평면에서 3D 점 집합의 경계 사각형을 얻는 가장 좋은 방법

분류에서Dev

3D로 점 또는 평면 렌더링

분류에서Dev

점 배열의 중간 점을 통해 3D 평면 플로팅

분류에서Dev

C # : 3 점 (3D)으로 구성된 호의 모든 점 찾기

분류에서Dev

3D 메쉬 / 표면 / 점에 특정 RGB 색상 할당

분류에서Dev

해당 지점의 X, Z를 기준으로 3D QUAD PLANE에서 3D 지점의 Y 계산

분류에서Dev

산점도 3d에 yz- 및 xz-grid 추가

분류에서Dev

Unity 3D에서 내 정점에 내 개체의 회전, 크기 조정 및 변환을 추가하려면 어떻게해야합니까?

분류에서Dev

3D 평면에서 이미지 평면에 평행 한 평면으로의 동질화

분류에서Dev

3D 데이터 포인트를 다항식 표면에 맞추고 표면 방정식을 다시 가져 오기

분류에서Dev

r에서 산점도 3D 그리기

분류에서Dev

3D에서 벡터를 따라 점 찾기

분류에서Dev

산점도에 3D 윤곽 그리기

분류에서Dev

OpenGL : 3D 공간에서 평면의 영역 내부에 계속 그리기

분류에서Dev

2D 평면에 3D 모델 투영

분류에서Dev

평면 3D 방정식에 대해 R을 사용하여 선형 방정식 세트 풀기

분류에서Dev

일부 기술적 문제에 직면 한 평균 점수

Related 관련 기사

  1. 1

    3D 산점도에 평면을 추가하는 방법

  2. 2

    Plotly의 3D 산점도에 회귀 평면 추가

  3. 3

    특이 값 분해를 사용하여 점 집합에 평면 맞추기

  4. 4

    Python : 3D 타원체 (편평 / 확장)를 3D 포인트에 맞추기

  5. 5

    플롯의 점 0에 3D 표면 추가

  6. 6

    R에 다차원 평면 맞추기

  7. 7

    창에 초점 맞추기

  8. 8

    창에 초점 맞추기

  9. 9

    점에 곡선 맞추기

  10. 10

    점진적 Convex Hull 3D 동안 한 지점에 대한 수평선 얻기

  11. 11

    FiPy의 3D 변수에서 평면을 추출하는 방법 (3D에서 2D로)

  12. 12

    2D 점 세트에 두 선 맞추기

  13. 13

    Matlab의 평면에서 3D 점 집합의 경계 사각형을 얻는 가장 좋은 방법

  14. 14

    3D로 점 또는 평면 렌더링

  15. 15

    점 배열의 중간 점을 통해 3D 평면 플로팅

  16. 16

    C # : 3 점 (3D)으로 구성된 호의 모든 점 찾기

  17. 17

    3D 메쉬 / 표면 / 점에 특정 RGB 색상 할당

  18. 18

    해당 지점의 X, Z를 기준으로 3D QUAD PLANE에서 3D 지점의 Y 계산

  19. 19

    산점도 3d에 yz- 및 xz-grid 추가

  20. 20

    Unity 3D에서 내 정점에 내 개체의 회전, 크기 조정 및 변환을 추가하려면 어떻게해야합니까?

  21. 21

    3D 평면에서 이미지 평면에 평행 한 평면으로의 동질화

  22. 22

    3D 데이터 포인트를 다항식 표면에 맞추고 표면 방정식을 다시 가져 오기

  23. 23

    r에서 산점도 3D 그리기

  24. 24

    3D에서 벡터를 따라 점 찾기

  25. 25

    산점도에 3D 윤곽 그리기

  26. 26

    OpenGL : 3D 공간에서 평면의 영역 내부에 계속 그리기

  27. 27

    2D 평면에 3D 모델 투영

  28. 28

    평면 3D 방정식에 대해 R을 사용하여 선형 방정식 세트 풀기

  29. 29

    일부 기술적 문제에 직면 한 평균 점수

뜨겁다태그

보관