FIT/FITS (기본적으로 이미지) 파일을 처리하는 일부 함수를 작성하려고합니다. 이 파일들은 천문학에서 흔히 볼 수 있습니다. 제 경우에는 여러 개의 보정 이미지가 있고 모든 이미지의 평균 또는 중간 값을 얻고 싶습니다. 내 이미지 (배열) 인 경우numpy 2D 배열의 평균 또는 평균을 얻기 전에 거절
그래서 기본적으로 : 중간 방법
ar1 = [[021, 654], [087, 065]]
ar2 = [[009, 097], [879, 009]]
ar1 = [[945, 008], [002, 007]]
resoult 이미지 (배열)입니다 : 내가 찾은
평균에 대한armed = [[021, 097],[087, 009]]
와 같은 일 :
mainArray = [ar1, ar2, ar3]
armed = numpy.median(mainArray, axis=0)
arave = numpy.average(mainArray, axis=0)
arsum = numpy.add(mainArray, axis=0)
arsub = numpy.subtract(mainArray, axis=0)
이들은 잘 작동하고 있습니다. 그러나 나는 거부감을 너무주고 싶다. 예를 들어, 배열을 평균하기 전에 min-max rejection을 사용하고 싶습니다.
4 가지 유형의 거부와 3 가지 유형의 거부가 있습니다.
결합 유형 : 합계, 뺄셈, 중간 값 및 평균. 거부 유형 : none, min-max, sigma 클립.
배열을 결합하기 전에 거부하는 방법은 무엇입니까?
방금 min-max 거부를 수행 할 클래스를 작성했습니다. 그러나 10X (2048x2048) 배열의 min-max를 거부하는 데 영원히 걸렸습니다. 그리고 실제로, inArray는 (10, 2048, 2048) 모양입니다.하지만 그 대가로 (2048, 2048, 8). 8은 최소 최대 거부를 의미합니다. 그러나 반대. .. 나는,이 배열의 평균, 합계 등을 의미, 중간 얻을 수 있습니다하지만 너무 오래 걸려서이 후 :(
def minmaxrej(self, inArray, verb=False):
"""
Returns all images minmax rejected.
@param inArray: All arrays to reject minmax. It'll return a reverced array.
@type inArray: numpy.array
@param verb: Get information while operation (Optional, False by default).
@type verb: boolean
@return: numpy.array
"""
if type(inArray) == numpy.ndarray:
if len(inArray.shape) == 3:
if inArray.shape[0] > 2:
poi = []
ln = []
lst = []
for i in xrange(inArray.shape[1]):
for u in xrange(inArray.shape[2]):
for k in xrange(inArray.shape[0]):
poi.append(inArray[k][i][u])
poi = numpy.sort(poi)[1:-1]
ln.append(poi)
poi = []
lst.append(ln)
ln = []
lst = numpy.asarray(lst)
if verb:
print "'minmaxrej' done."
return lst
else:
if verb:
print "Min-Max rejection requires at least 3 arrays. Got %s." %(inArray.shape[0])
else:
if verb:
print "Wrong array shape. Expected array type: %s" %(inArray.shape)
else:
if verb:
print "Unexpected input type for input arrays.\nArray expected.\nReceived %s" %(type(inArray))
나는이 일을보다 효과적이고 빠른 방법이 필요
ittertools 단지 (4194304) 내 (2048,2048) 모양의 배열을 변환
감사 조건을 결합 할 수 있도록 슬라이스는뿐만 아니라 부울 행렬이 될 수 있습니다. 나는 모든 1stx1st, 1stx2end, 1stx3rd ... 2047thx2047th 및 2048thx2048th 값의 중앙값을 얻고 싶었습니다. – MSH
예에서 세 개의 중첩 목록 (ar1, ar2 및 ar1 다시 사용)을 사용하는 경우 3 개 목록 (ar1, ar2, ar3)의 첫 번째 목록에있는 모든 첫 번째 항목의 중앙값을 원하지 않으십니까? 행렬을 만들고 벡터화 (실제로 속도를 높이기) 때문에 중첩 된 목록은 먼저 행렬의 "행"으로 사용할 플랫 목록이되어야합니다. itertools.chain이 수행해야하는 작업입니다. – rustil
실제로 프로세스 후에 매트릭스가 바뀌는 경우에만 작동합니다. 이 과정을 거친 후에는 벡터가 매트릭스가 아니기 때문입니다. 재 형성은 문제가되지 않습니다. 문제는 다음과 같습니다. 이미지 데이터로 작업하고 있습니다. 그래서 10 장의 이미지가 있고 교정 이미지입니다. 모든 픽셀의 평균을 얻고 싶습니다. 모든 첫 번째 픽셀의 평균이 첫 번째 픽셀이 될 것이고, 모든 두 번째 픽셀의 평균은 두 번째 픽셀이 될 것입니다. 거절을 말하면 위의 프로세스에서 최소 최대 거부를 의미합니다. 모든 첫 번째 픽셀의 평균을 구할 때 최소 최대 거부를 수행하려고합니다. 그리고 적어도 나는 이미지를 가질 것이다. – MSH