필자는 열 또는 첫 번째 차원에 피크가있는 3D 데이터의 "큐브"를 가지고 있습니다. 피크의 인덱스는 검사되는 행에 따라 이동할 수 있습니다. 세 번째 차원은 좀 더 복잡한 것을 할 수도 있지만, 지금은 선형 함수로 스케일링하는 것으로 생각할 수 있습니다.dim3에서 다양한 인덱스를 사용하여 dim1을 따라 자릅니다.
각 행에 대해 열 피크가 0.5에 가장 근접하도록 Z 인덱스가 선택된다는 제약 조건에 따라 첫 번째 차원을 따라 max의 인덱스를 찾고 싶습니다. 여기
는 고정 Z와 행에 비행기, 열입니다 샘플 이미지입니다 :이 배열은 항상 큰 것 - 말 21x11x200 float64s, 그래서 나는 벡터화 싶습니다 이 계산. for 루프를 작성, 그것은 다음과 같습니다
cols, rows, zs = data.shape
for i in range(rows):
# for each field point, make an intermediate array that is 2D with focus,frequency dimensions
arr = data[:,i,:]
# compute the thru-focus max and find the peak closest to 0.5
maxs = np.max(arr, axis=0)
max_manip = np.abs(maxs-0.5)
freq_idx = np.argmin(max_manip)
# take the thru-focus slice that peaks closest to 0.5
arr2 = data[:,i,freq_idx]
focus_idx = np.argmax(arr2)
print(focus_idx)
내 문제는 내가 벡터 연산들로 이러한 계산을 롤백하는 방법을 모른다는 것이다. 나는 어떤 도움을 주셔서 감사합니다, 감사합니다!
- - loop는'[10 10 9 9 9 9 8 8 8 7]'을주고 vectorized는'[9 9 9 9 9 9 8 8 7 7]'을 준다. –
@BrandonDube 거기에'abs'를 사용하여 놓친 것. 편집 됨. – Divakar
나는 그것을 더했다. - 조금 더 살펴 보도록하겠습니다. –