Прошло пару дней, и никто не написал ответ, данный в комментариях hpaulj и SubhaneilLahiri, поэтому мне лучше сделать это самому.Моя причина для принятия этого принятого ответа заключается в том, что он достаточно общий, чтобы указывать название вопроса, даже в случаях, выходящих за рамки конкретной модели, приведенной в вопросе.
# prepare zeros of the correct shape:
out = np.zeros(np.broadcast(t, speed).shape), dtype=float)
# write the product values into the prepared array, but ONLY
# according to the mask t!=0
np.multiply(t, speed, where=t!=0, out=out)
В конкретной модели в вопросепредварительно подготовленное значение по умолчанию, равное 0, уже является правильным для всех мест, в которых тест t!=0
не проходит: 0 * speed
равен 0
в любом случае, где speed
конечен, и это также 0
по указанию (согласнок правилу модели), когда speed
бесконечно.Но этот подход можно адаптировать к более общему случаю: в принципе, можно было бы использовать дополнительные пустые вызовы ufunc для заполнения замаскированных частей выходного массива с результатами произвольно различных правил.