2015-05-05 2 views
0

У меня есть файл, в котором мне нужно использовать первый столбец. Остальные столбцы необходимо интегрировать по отношению к первому. Допустим, мой файл выглядит следующим образом:Работа с несколькими столбцами из файла данных

100 1.0 1.1 1.2 1.3 0.9 
110 1.8 1.9 2.0 2.1 2.2 
120 1.8 1.9 2.0 2.1 2.2 
130 2.0 2.1 2.3 2.4 2.5 

Могу ли я написать кусок кода, который занимает вторую колонку и интегрируется с первым, то третий и интегрируется в отношении к первому и так далее? Для моего кода, у меня есть:

import scipy as sp 
first_col=dat[:,0] #first column from data file 
cols=dat[:,1:] #other columns from data file 

col2 = cols[:,0] # gets the first column from variable cols 
I = sp.integrate.cumtrapz(col2, first_col, initial = 0) #integration step 

Это работает только для первой строки из переменной седловины, однако, я не хочу, чтобы написать это для всех остальных столбцов, это выглядело бы обсуждать (мысль о том, это заставляет меня дрожать). Я видел подобные вопросы, но не смог рассказать ответы на мои, а те, которые более или менее одинаковы, имеют неопределенные ответы. Есть идеи?

+0

вы можете использовать 'genfromtxt', а затем выполнить все интеграцию самостоятельно в качестве альтернативы. – Matthew

+0

Какие параметры позволят мне циклически перебирать столбцы? – skitt1z1

+1

Если я понял, что вы хотите правильно, вы хотите применить ту же интеграцию по нескольким столбцам, поэтому 'data = sp.genfromtxt (« file.txt »); для col в данных [0]:; (data [:, 0], data [:, col]) 'где' integrate' является функцией def. (хотя ответ, похоже, делает то, что вы хотите, не имея необходимости писать его самостоятельно!) – Matthew

ответ

1

Функция cumtrapz принимает аргумент axis. Например, предположим, что вы кладете первый столбец в x, а остальные столбцы в y, и они имеют следующие значения:

In [61]: x 
Out[61]: array([100, 110, 120, 130]) 

In [62]: y 
Out[62]: 
array([[ 1.1, 2.1, 2. , 1.1, 1.1], 
     [ 2. , 2.1, 1. , 1.2, 2.1], 
     [ 1.2, 1. , 1.1, 1. , 1.2], 
     [ 2. , 1.1, 1.2, 2. , 1.2]]) 

Вы можете интегрировать каждый столбец y относительно x следующим образом:

In [63]: cumtrapz(y, x=x, axis=0, initial=0) 
Out[63]: 
array([[ 0. , 0. , 0. , 0. , 0. ], 
     [ 15.5, 21. , 15. , 11.5, 16. ], 
     [ 31.5, 36.5, 25.5, 22.5, 32.5], 
     [ 47.5, 47. , 37. , 37.5, 44.5]]) 
+0

Это сработало фантастически! Я должен был это увидеть после использования cumtrapz себя ... – skitt1z1

Смежные вопросы