:) Присказка.
Прибегает ко мне чел и говорит, ваша программа ломается. Мы что не так? …… Пол часа объяснений…….
И наконец “Ну блин не могу объяснить что не так. Сделайте так чтобы мне было хорошо.”
Мой вольный перевод вашего описания:
Перевод 1:
Напишите функцию принимающую два массива из трех значений x,xMax и возвращающую x покомпонентно ограниченные сверху значениями xMax.
Решение:
def limit_by_upper_bound(x,xMax):
return numpy.min([x,xMax],axis=0)
Перевод 2:
Напишите функцию принимающую вектор x, и вектор xMax и возвращающую вектор x1 сонаправленный с вектором x и лежащий внутри гиперпараллепипеда одна из вершин которого xMax. xMax>0
Решение:
import numpy as np
import assert
def limit_by_upper_bound(x,xMax):
assert(np.min(xMax)>0)
k=np.min(np.abs(x)/xMax)
if k>1:
return np.array(x)/k
else:
return np.array(x)
Извините я проигнорировал требование чтобы компонент вектора было 3. Если надо добавьте проверки.
Почему мне трудно понять постановку задачи:
boltayka
Нужно, чтобы x y z не выходили за пределы максимума
Эти переменные даны на входе. Нужно в данном контексте это ваше огорчение или радость что они подходят под условие или нет и ничего не объясняет по поводу того что должно быть результатом программы.
упомянут один максимум а строкой выше их 3 - как это понимать?
boltayka
массив x y z может быть не сортированным
так никто и предполагает что он сортированный. Это вы должны дополнительно указать если он будет сортированный.
boltayka
сортировать его нельзя
почему нельзя? Внутри функции можно делать все что заблагорассудится. Мы должны удовлетворить внешним спецификациям те что на входе и что изменится во внешнем мире. Да собственно никто и не жаждет их сортировать.
boltayka
числа могут быть одинаковыми
см выше так никто и предполагает что они разные.