나는 numpy 배열을 가지고있다. 축을 따라 연속하는 2 차원 슬라이스에 함수를 실행하고 결과로 생성 된 슬라이스를 함께 쌓아서 새 3D 배열을 형성하고 싶습니다. 분명히 이것을 할 수있는 많은 방법이 있습니다. 나는 가능한 가장 간결한 방법으로 그것을하고 싶습니다. 나는 이것이 numpy.vectorize
으로 가능할 것이라고 생각하지만, 이것은 첫 번째 축을 따라 움직이는 2D 슬라이스가 아니라 내 배열의 모든 값을 반복하는 함수를 생성하는 것으로 보인다.연속적인 2 차원 슬라이스를 통한 넘치는 벡터화 함수
new3dmat = np.vectorize(func2dmat)(my3dmat)
그리고이 같은 일이 수행 :
new3dmat = np.empty_like(my3dmat)
for i in range(my3dmat.shape[0]):
new3dmat[i] = func2dmat(my3dmat[i])
가 어떻게 이러한 목표를 달성 할 수
기본적으로, 내가 이렇게 보이는 코드를 원하는?
'func2dmat'을 전체 3D 배열에서 작동하도록 다시 쓸 수 없습니까? YMMV이지만, 일반적으로 tHat는 이러한 유형의 벡터화를 수행하는 가장 좋은 방법입니다. – Jaime
그럴 수 있지만 루프 솔루션이 더 좋습니다. 나는 그 구성 요소 (2 차원 행렬)에서 작동하는 함수로 복합 데이터 구조 (3 차원 행렬)를 간결하게 조작 할 수 있기를 원합니다.이 함수는 그 구성 요소가 오는 더 큰 구조에 대한 지식을 필요로하지 않아야합니다. 그런 식으로는 하나의 함수 만 필요합니다. 2 차원 행렬을 포함하는 모든 가능한 구조에 특별한 함수가 필요하지 않습니다. –
예를 들어 GUFUNC를 원합니다. ['np.linalg.det'] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.det.html) ... 관례는 모든 2D에 기능을 작동시키는 것입니다 입력의 마지막 2 차원에 배열. 이를 위해 빠른 벡터화 된 코드를 작성할 수 있다면 다른 축을 처리하도록하는 것이 현명합니다. ['np.rollaxis'] (http://docs.scipy.org/doc/numpy/reference/generated/) numpy.rollaxis.html) 등이있다. numpy를 최대한 활용하려면 Python 루프 솔루션을 사용하는 것이 좋습니다. – Jaime