Почему numpy.trapz () возвращает ноль? - PullRequest
1 голос
/ 04 октября 2019

У меня есть следующие настройки:

a.T = [[0.  0.4 0.8 1.2 1.6 1.  1.2 1.4 1.6 1.8 0.5 0.9 1.3 1.7 2.1 2. ]]
b.T = [[0.  0.4 0.8 1.2 1.6 2.  2.2 2.4 2.6 2.8 3.  3.4 3.8 4.2 4.6 5. ]]

Рассмотрим b как значения времени, а значения, принимаемые функцией в эти моменты, определяются как a.

Теперь, когда я делаю np.trapz(interpolated_age,interpolated_time), я получаю результат этой интегральной операции в виде нескольких 0-значных массивов. Но если я сделаю операцию transpose с аргументами метода trapz, то есть np.trapz(interpolated_age.T,interpolated_time.T), я получу правильный ответ как одно значение.

Может кто-нибудь указать, в чем причина этого? Я думал, что для операции trapz нам понадобятся только 2 массива одинакового размера для 2D интеграции.

1 Ответ

1 голос
/ 05 октября 2019

Ваши массивы interpolated_age и interpolated_time имеют форму (n, 1). trapz имеет параметр axis со значением по умолчанию -1 (последняя ось). Это означает, что вы вычисляете n раз площадь под одной точкой, равной 0, следовательно, вы получаете массив из n нулей.

Если вам нужно, чтобы ваш массив был 2D, укажите axis=0 для интегрирования по первой оси (n точек), чтобы получить правильный результат.

area_under_curve = np.trapz(interpolated_age, interpolated_time, axis=0)

В качестве альтернативы, вы можете проверить, можете ли вы использовать простые одномерные массивы (не можете определить из кода вашей программы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...