2017-02-18 2 views
0

길이가 다른 배열이 여러 개 있습니다.이 데이터를 비교 가능한 배열로 평균화하고 싶습니다.동일한 고정 길이의 평균 배열

np.array([(1+2*0.66)/1.66, (2*0.33+3*1+4*0.33)/1.66, (4*0.66+5)/1.66 ])

때문에 : 3분의 5 = 1.66

array1 = np.array([1, 2, 3, 4, 5]) 
array2 = np.array([1, 2, 3, 4]) 
target_length = 3 
def cast(array, target_length): 
    ... 

cast(array1, target_length)로 제공한다. 또한 우리가 얻을 것이다 : cast(array1, target_length) 같이

np.array([(1+2*0.33)/1.33, (2*0.66+3*0.66)/1.33, (3*0.33+4)/1.33])

이유는 3분의 4 = 1.33.

numpy 솔루션을 사용할 수 있으므로 어레이를 확장 할 필요가 없습니다.

numpy 라이브러리를 사용하는 솔루션이 있습니까?

+0

적용 할 수식은 무엇입니까? 어레이가 성장해야 할 때, 대상 길이가 1 인 경우 ... – trincot

+1

당신은 무엇을 하려는지 확실하지 않아야합니다. – PrestonH

+0

답을 업데이트했습니다. 배열은 자랄 수 없습니다. 정책은 배열 길이를'target_length'로 나누어 임계 값을 얻은 다음 임계 값을 얻을 때까지 부분적으로 값을 더하는 것입니다. –

답변

2

문제는 몇 가지 다른 방법으로 읽을 수 있지만 내가 바로 그것을 가지고 있다면, 당신이 달성하려고하는 것은 그이이를 통해 얻을 수있다, 당신이 목표로하는 무슨 경우

def cast(array, target_length): 
    target = np.zeros(target_length) 
    for i in range(target_length*len(array)): 
     target[i//len(array)] += array[i//target_length]/len(array) 
    return target 

입니다 될 수 있습니다 numpy operations as

def cast(array, target_length): 
    return np.mean(np.repeat(array, target_length).reshape(-1, len(array)), 1) 
+0

질문에 "numpy 라이브러리를 사용하는 솔루션이 있습니까?" 기본적으로 대답은 "아니오"입니다. – MSeifert

+0

@MSeifert : 반환 유형으로'np.array'를 얻으 려하므로 어떤 해결책을 제시 하든지 상관없이 'numpy'를 피하는 것이 어려울 것입니다. (나는 계산을 변경하지 않고 명시 적으로하기 위해 답을 수정했다.) – fuglede

+1

이것은 리턴 타입이 아니라 문제의 벡터화에 관한 것이다. 귀하의 솔루션은 파이썬리스트보다 numpy 배열에서 더 느립니다. 그것이 바로 내 눈에 멍청한 솔루션입니다. – MSeifert