Я пытаюсь векторизовать цикл for, который у меня внутри метода класса. Цикл for имеет следующий вид: он выполняет итерацию через кучу точек и в зависимости от того, истинна ли определенная переменная (называемая «self.condition_met»), вызывает пару функций в точке и добавляет результат в список , Каждая точка здесь представляет собой элемент в векторе списков, то есть структуру данных, которая выглядит как массив ([[1,2,3], [4,5,6], ...]). Вот проблематичной функция:векторизация цикла for в numpy/scipy?
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, так что кажется ненужным, чтобы проверить его каждый раз, но я не знаю, как лучше написать это. Поскольку здесь нет деструктивных операций, похоже, что я мог переписать всю эту вещь как векторную операцию - возможно ли это? любые идеи, как это сделать?
«Функция векторизации предоставляется в первую очередь для удобства, а не для производительности. Реализация по существу является циклом for. " – endolith