클래스 메서드 내부에있는 for 루프를 벡터화하려고합니다. for 루프는 다음과 같은 형식을 취합니다. 여러 점을 반복하며 특정 변수 (아래의 "self.condition_met")가 true인지 여부에 따라 점에서 함수 쌍을 호출하고 결과를 목록에 추가합니다 . 여기에있는 각 점은 목록의 벡터, 즉 배열 ([[1,2,3], [4,5,6], ...])처럼 보이는 데이터 구조의 요소입니다.numpy/scipy에서 for 루프를 벡터화하는 중입니까?
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가 호출되기 전에 설정되고, 그래서 그것을 각 시간을 확인하기 위해 불필요한 것,하지만 난 더 나은이를 작성하는 방법 확실하지 않다 : 여기에 문제가있는 기능입니다. 여기서 파괴적인 작업이 없기 때문에이 전체 작업을 벡터화 된 작업으로 다시 작성할 수있는 것처럼 보입니다 - 가능합니까? 어떤 생각이 어떻게 할 수 있습니까?
"vectorize 기능은 주로 편의를 위해 제공되며 성능을 위해 제공되지 않습니다. 구현은 기본적으로 for 루프입니다. " – endolith