Как рассчитать формулу для каждого значения в массиве? - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь понять, как использовать NumPy для расчета формулы для разных времен.То, как написан код, дает все значения, где y больше 0. Я экспериментирую, как получить значения для всех y.

Есть ли кто-нибудь, кто может объяснить мне часть: ft = t * [y >= 0.0 ].Как использовать части в скобках?

from numpy import *

g = 10.0
h0 = 10.0

t = arange(0, 10.1 ,0.1)
y = h0 - 0.5*g*t*t

ft = t * [y >= 0.0 ]


print(ft)

Это вывод, но я бы хотел увидеть все рассчитанные значения.Поэтому я немного поэкспериментировал, но я не мог понять, как это сделать и как;[y> = 0.0] часть точно работает.

[[0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.  1.1 1.2 1.3 1.4 0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. ]]

Если я использую [y] вместо [y> = 0.0], я получаю следующее:

[[ 0.000000e+00  9.950000e-01  1.960000e+00  2.865000e+00  3.680000e+00
   4.375000e+00  4.920000e+00  5.285000e+00  5.440000e+00  5.355000e+00
   5.000000e+00  4.345000e+00  3.360000e+00  2.015000e+00  2.800000e-01
  -1.875000e+00 -4.480000e+00 -7.565000e+00 -1.116000e+01 -1.529500e+01
  -2.000000e+01 -2.530500e+01 -3.124000e+01 -3.783500e+01 -4.512000e+01
  -5.312500e+01 -6.188000e+01 -7.141500e+01 -8.176000e+01 -9.294500e+01
  -1.050000e+02 -1.179550e+02 -1.318400e+02 -1.466850e+02 -1.625200e+02
  -1.793750e+02 -1.972800e+02 -2.162650e+02 -2.363600e+02 -2.575950e+02
  -2.800000e+02 -3.036050e+02 -3.284400e+02 -3.545350e+02 -3.819200e+02
  -4.106250e+02 -4.406800e+02 -4.721150e+02 -5.049600e+02 -5.392450e+02
  -5.750000e+02 -6.122550e+02 -6.510400e+02 -6.913850e+02 -7.333200e+02
  -7.768750e+02 -8.220800e+02 -8.689650e+02 -9.175600e+02 -9.678950e+02
  -1.020000e+03 -1.073905e+03 -1.129640e+03 -1.187235e+03 -1.246720e+03
  -1.308125e+03 -1.371480e+03 -1.436815e+03 -1.504160e+03 -1.573545e+03
  -1.645000e+03 -1.718555e+03 -1.794240e+03 -1.872085e+03 -1.952120e+03
  -2.034375e+03 -2.118880e+03 -2.205665e+03 -2.294760e+03 -2.386195e+03
  -2.480000e+03 -2.576205e+03 -2.674840e+03 -2.775935e+03 -2.879520e+03
  -2.985625e+03 -3.094280e+03 -3.205515e+03 -3.319360e+03 -3.435845e+03
  -3.555000e+03 -3.676855e+03 -3.801440e+03 -3.928785e+03 -4.058920e+03
  -4.191875e+03 -4.327680e+03 -4.466365e+03 -4.607960e+03 -4.752495e+03
  -4.900000e+03]]

Я бы хотелчтобы узнать, как я могу использовать numpy для одновременного вычисления всех результатов формулы для разных временных интервалов.

Спасибо,

Ответы [ 2 ]

1 голос
/ 02 июля 2019

y >= 0.0 дает вам массив логических значений, которые содержат True / False в зависимости от выполнения условия y >= 0.0. Когда вы заключаете его в [] как [y >= 0.0], вы получаете список, который содержит один массив логических значений, как указано @nicola в комментариях ниже.

[array([ True,  True,  True,  True, True, False, False, False,...
   ... False, False, False, False])]

Теперь вы умножаете это на массив arange, который даст вам 0, когда правая часть оператора * равна False, и даст вам фактическое значение из arange, когда правая часть * оператор True

0 голосов
/ 02 июля 2019

Массив [y> = 0.0] производит и массив логических значений.т.е. 1, если y> = 0 и 0, если нет.Этот массив из 1 и 0 затем умножается на t.

Однако из вашего вопроса мне не ясно, что вы пытаетесь с этим делать.

...