함수 행렬이 주어집니다 (모든 함수는 다른 논리를 가질 수 있음). 모양은 [N, x]
입니다.
matrix_of_functions = [
[fun11, fun12, fun13],
[fun21, fun22, fun23],
...
[funN1, funN2, funN3]
]
shape를 가진 매개 변수 배열도 있습니다 [x]
.
array_of_parameters = [param1, param2, param3]
이 치수는 동일한 크기 x
입니다. 매개 변수는이 차원에서 브로드 캐스트되어야하며 기능이 적용되어야합니다.
따라서 결과 행렬은 다음과 같습니다 ( numpy
끝에 배열 이어야 함 ).
matrix_of_results = [
[fun11(param1), fun12(param2), fun13(param3)],
[fun21(param1), fun22(param2), fun23(param3)],
...
[funN1(param1), funN2(param2), funN3(param3)]
]
이 작업을 수행하는 아름다운 방법이 있어야 할 것 같지만 어떻게?
분명히 다음과 같이 할 수 있습니다.
matrix_of_results = []
for array_of_functions in matrix_of_functions:
array_of_results = [fun(param) for fun, param in zip(array_of_functions, array_of_parameters])]:
matrix_of_results.append(array_of_results )
또는 더 콤팩트 :
matrix_of_results = [
[fun(param) for fun, param in zip(array_of_functions, array_of_parameters])]
for array_of_functions in matrix_of_functions
]
또는 다른 많은 방법 ...하지만 그것은 읽기도 좋고 아름답지도 않습니다.
나는 numpy
ish 방법 이 있기를 바랐다. 방송이 자동으로 모양 때문에 처리하는 것을 의미 [N, x]
하고 [x]
캐스트 가능한입니다. 그러나 그것은 사실이 아닌 것 같습니다 ( np.vectorize
함수 목록이나 행렬이 아닌 단일 함수 만 취합니다).
@mephisto는 비슷한 목표를 포함하는 또 다른 질문을 지적했습니다. Numpy : 요소별로 곱하는 것처럼 동일한 길이의 2d 배열 값에 함수 배열을 적용합니까? (파이썬 함수를 연산자로 사용합니까?)
차이점은 다른 질문은 함수 배열을 매개 변수 행렬로 브로드 캐스팅하는 것이 었습니다. 좋은 부분은 매개 변수 배열을 함수 행렬에 매핑하려는 경우에도 대답이 적용된다는 것입니다.
결국 해결책은 np.vectorize
다음과 같습니다.
apply_vectorized = np.vectorize(lambda f, x: f(x))
matrix_of_results = apply_vectorized(matrix_of_functions, array_of_parameters)
그 apply_vectorized
방법은 내가 찾던 바로 그것입니다. 이 기능이 기본적으로 나오고 도우미 기능을 구현할 필요가 없기를 바랐지만 그와 함께 살 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다