Как указать условия внутри np.where (), когда они сами зависят от некоторого индекса? - PullRequest
0 голосов
/ 08 июня 2018

У меня много частиц внутри сферы с известным радиусом, называемым Sphere_Radius.Известно, что массивы, положения и трехмерные массивы этих частиц соответственно равны mass_array с формой (16658089,) , position_array и velocity_array и с формами (16658089)., 3) .Кроме того, частицы связаны с некоторыми случайными числовыми идентификаторами.Функция под названием Расстояния_Газ создает массив, элементами которого являются расстояния между каждой частицей газа и центром сферы.

Какая-то карандашоподобная балка с фиксированным квадратным поперечным сечением проходит сквозь сферу вдоль оси z на всем протяжении сферы.Я хотел бы рассчитать среднюю скорость всех частиц внутри этого луча.Положение сторон этого луча известно (скажем, сетка ограничена -1 <= x <= +1 и -1 <= y <= +1).Но проблема, которую я имею, состоит в том, чтобы идентифицировать все частицы, которые находятся внутри этого луча, а затем использовать их идентификаторы для расчета средней скорости внутри луча.Предполагая, что я знаю эти идентификаторы, вот моя строка кода для получения средней скорости внутри этого луча: </p>

np.array([np.tensordot(mass_array[i], velocity_array[i], axes=([0],[0])) for i in np.where(distances_Gas <= Sphere_Radius)])*pow(sum(sum(mass_array[i] for i in np.where(distances_Gas <= Sphere_Radius))), -1)

(В основном я использую Сигма (мВ) / Сигма (м) для средней скорости)

Однако distances_Gas <= Sphere_Radius - это только одно условие из трех, где следующие два условия (как упомянуто ранее) отсутствуют, и я не уверен, как вставить их в такойТаким образом, код создает некоторый массив (1, 3)-shape, представляющий среднюю скорость частиц внутри луча:

-1 <= position_array [i] [0] <= + 1 </p>

-1 <= position_array [i] [1] <= + 1 </p>

...