Значение int
- это число с плавающей запятой, но savetxt
требует массив.Вы хотите создать пустой массив для всех результатов интеграции, а затем сохранить его в конце, используя 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 : дальнейшее объяснение 2-го раздела кода приведено ниже.
Вы используете трапециевидное правило для интегрирования множества значений, которое представляет собой метод аппроксимации интегрирования, который работает путем суммирования среднего значения для последовательногоЗначения y на кривой, умноженные на изменение x между двумя значениями y.Это равносильно вычислению площади трапеции, соединяющей два значения y и ось X, например:

Это не совсем ясно из вашего вопроса, но этоКазалось, что вы интегрируете значения по времени, так что ось X будет представлять время.Значения x должны быть включены, чтобы получить правильную площадь каждой трапеции (площадь каждой трапеции равна (x 2 - x 1 ) * (y 2 + y 1 ) / 2, а окончательный результат интегрирования представляет собой сумму всех таких областей).
Самый простой способ включить эти значения оси x - передать его в функцию trapz
в качестве параметра x
(см. строка документа ).В приведенном выше примере я использовал t = data[0,:]
в качестве массива значений x, например.
Еще одно предупреждение: если все интервалы между значениями x одинаковы (так что x 2 - x 1 - это константа), вы можете сэкономить некоторые вычисления, вытащив их из суммы и просто умножив их в конце.Эта функция доступна через функцию trapz
с параметром dx
.Так, если вы измеряете время, например, каждые 30 секунд, вы можете заменить 2-ю строку в моем 2-м примере следующим образом:
int_array = apply_along_axis(trapz, 0, data[1:,:], None, 30)
Надеюсь, это поможет.