Я пытаюсь векторизовать цикл for, который есть внутри метода класса. Цикл for имеет следующую форму: он выполняет итерацию по множеству точек и в зависимости от того, является ли истинной определенная переменная (называемая «self.condition_met» ниже), вызывает пару функций для точки и добавляет результат в список , Каждая точка здесь представляет собой элемент в векторе списков, то есть структуру данных, которая выглядит как массив ([[1,2,3], [4,5,6], ...]). Вот проблемная функция:
def myClass:
def my_inefficient_method(self):
final_vector = []
# Assume 'my_vector' and 'my_other_vector' are defined numpy arrays
for point in all_points:
if not self.condition_met:
a = self.my_func1(point, my_vector)
b = self.my_func2(point, my_other_vector)
else:
a = self.my_func3(point, my_vector)
b = self.my_func4(point, my_other_vector)
c = a + b
final_vector.append(c)
# Choose random element from resulting vector 'final_vector'
self.condition_met устанавливается перед вызовом my_inefficient_method, поэтому, кажется, нет необходимости проверять его каждый раз, но я не уверен, как лучше написать это. Поскольку здесь нет деструктивных операций, похоже, я мог бы переписать всю эту вещь как векторизованную операцию - возможно ли это? есть идеи как это сделать?