Python-Integate мәтіндік файлды сақтаңыз

Барлығына:

Бұл мәселе кейбір MS зерттеулеріне қатысты.

Мен не істеуді жөн көремін. Мәндердің мәтіндік файлы бар (уақыт, ..... мәндері). Содан кейін 0-ден бастап барлық мәндерге осы мәндерге біріктіруді қалаймын, содан кейін бұл мәнді мәтіндік файлға сақтаңыз.

from numpy import *
from pylab import *
import os, sys, shutil
import math

#######################

#Load Data
data = loadtxt('wh.txt')

#Open file to save plots to
shutil.rmtree("wh_files")
os.makedirs("wh_files")
os.chdir("wh_files")

for i in range(0,100,1):
   int = trapz(data[i,:],axis=0)
   print int
   savetxt('int.txt', int)

Мен бұл іске қосылғанда келесі қатені аламын:

  File "integral.py", line 19, in 
    savetxt('int.txt', int)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/numpy/lib/npyio.py", line 960, in savetxt
    ncol = X.shape[1]
IndexError: tuple index out of range

Мен бұл мәселені бірнеше күн бойы өшіруге тырыстым, бірақ әлі шешім қабылдадым. Мен сізге бере алатын кез келген анықтаманы/пікірлерді бағалаймын.

0
int = trapz (деректер [i,:], ось = 0) деректерінің орнына data [i:] дегенді білдірдіңіз бе? ] ?
қосылды автор Seth Carnegie, көзі
Сондай-ақ, стандартты түрлердің бірі ( int ) сияқты айнымалы болуы - бұл жаман идея.
қосылды автор Schnouki, көзі

1 жауаптар

int мәні float, бірақ savetxt массивді талап етеді. Барлық интеграциялық нәтижелер үшін numpy жиымын жасау керек, содан кейін оны savetxt пайдалану арқылы сақтаңыз. Менің ойымша, осындай нәрсе жасау керек:

int_array = apply_along_axis(trapz, 0, data)
savetxt('int.txt', int_array)

Есіңізде болсын, бұл (сіздің бастапқы мысалмен бірге) уақыт аралығымен емес, уақыт өрістерін жинайды. Бұл тек қана x-осі бойынша ара қашықтық 1 болса, жарамды нәтижелерге әкеледі. Әйтпесе сіз келесідей нәрсе жасағыңыз келеді:

t = data[0,:]
int_array = apply_along_axis(trapz, 0, data[1:,:], t)
savetxt('int.txt', int_array)

Уақыт өрістерін сандық деп есептейік.

edit: Further explanation of 2nd code section follows.

Сіз екі y-мәндерінің арасында x-дың өзгеруімен қисықтағы дәйекті y-мәндерінің орташа мәндерін қосу арқылы жұмыс істейтін интеграциялық жақындату әдісі болып табылатын әртүрлі мәндерді интеграциялау үшін трапеция ережесін пайдаланасыз. Бұл екі y-мәнін және x осін байланыстыратын трапецияның ауданын есептеуге арналған:

Trapezoid Rule

Сіздің сұрағыңыздан мүлдем анық емес, бірақ x-осі уақытты көрсететін етіп, құндылықтарды уақыт бойынша біріктірген сияқты көрінді. Әрбір трапецияның дұрыс аймағын алу үшін x-мәндерін қосу керек (әрбір трапецияның аумағы (x 2 - x 1 ) * (y 2 + y 1 ) және соңғы интеграциялық нәтиже - барлық осындай салалардың жиынтығы).

Бұл x-ось мәндерін қосудың ең қарапайым жолы - trapz функциясына x параметрі ретінде жіберу ( docstring ). Жоғарыдағы мысалда t = data [0,:] сияқты х мәндерінің жиыны ретінде пайдаланылды.

Басқа да ескерту: егер x мәндерінің арасындағы барлық аралығы бірдей болса (x 2 - x 1 - тұрақты болса), сіз бұл есептен шығарып, жинақтап, оны ақыр соңында көбейтуге болады. Бұл функция dx параметрімен trapz функциясы арқылы қол жетімді. Мәселен, егер сіз 30 секунд сайын уақыт өлшемін алсаңыз, мысалы, 2-ші жолды 2-ші мысалда ауыстыра аласыз:

int_array = apply_along_axis(trapz, 0, data[1:,:], None, 30)

Бұл көмектеседі деп үміттенемін.

2
қосылды
Жоғарыдағы өңдеуді қараңыз. бұл көмектеседі деп үміттенемін
қосылды автор Will, көзі
Кеңестің бәріне рахмет. Сіз жазған соңғы кодты түсіндіре аласыз ба? Мен нені білдіретініне сенімді емеспін. @Will
қосылды автор geop, көзі
Көмек үшін рахмет! Мен өз сұрағым бойынша жақсы жұмыс істемедім. Мен әр уақытта уақытқа қатысты емес, тек көлемді біріктіретін факт. яғни 1.0с дейін су бетінің биіктігін білдіретін бірқатар сериялар бар, содан кейін 1.5с үшін жаңа мәндер сериясы жаңа бетінің конфигурациясын білдіреді. Мен осы құндылықтарды қабылдап, уақыттың қалай өзгергенін көріп отырмын. Бұл сұраққа жауап беру уақытын шынымен бағалаймын.
қосылды автор geop, көзі