2017-09-19 1 views
-2

파이썬에서 Paper의 두 공식을 사용하고 싶습니다.수식을 파이썬으로 변환하는 방법?

공식 : enter image description here

이 코드로 변환 :

P = A    #(size 24x24) 
Q = B    #(size 24x24) 
sum_of_all = 0 
    for row in range(0,P.shape[0]): 
     for column in range (0,P.shape[1]): 
      zwischen =(w.iloc[row] * np.power((abs(P[row, column])-abs(Q[row,column])),2))[0] 
      sum_of_all = sum_of_all +zwischen 
res = np.sqrt(sum_of_all) 

다른 화학식 :

:

enter image description here

는이 코드로 변환

P = A 
Q = B 
sum_of_all = 0 
for row in range(0,P.shape[0]): 
    for column in range (0,P.shape[1]): 
     zwischen = P[row, column]*Q[row,column] 
     sum_of_all = sum_of_all +zwischen 
sum_of_all = (w.iloc[row])[0]*abs(sum_of_all)   
res = np.sqrt(2-(2*sum_of_all)) 
  1. 제대로 했습니까?

  2. 파이어 닉 방식으로 (예 : 수식 1)을 변경할 수 있습니까?이 수식은 실제로 자주 사용되므로 (30000 회) 루프가 너무 느려지므로.

+0

왜 팬더 데이터 프레임에 체중이 있습니까? –

+0

왜 안 되니? 데이터 프레임 또는 numpy 배열 인 경우 차이가 있습니까? –

+0

성능에 대해 걱정하면 가장 작은 데이터 구조로 작업하십시오. 질 낮은 배열로 갈 때 너무 많은 여분을 얻지는 않을지라도. 또한 코드를 해석하고 유지하는 것이 얼마나 쉬운 지와 관련이 있습니다. 그렇지 않으면, 첫 번째 "함수"에서 절대 행렬 A와 B (또는 별칭 P와 Q)에 절대 값을 미리 계산해야합니다. abs가 아니라 std 라이브러리의 올바른 numpy 요소 - 현명한 abs 함수 당신은 당신의 수입품을 보여주지 않는다). 그런 다음 for 루프 대신 numpy를 사용하여 뺄셈을 수행 할 수도 있습니다. –

답변

1

numpy를 사용하면 많은 일들이 "잘된 것"이라는 것을 알 수 있습니다. 이제 더 테스트 데이터를주지 않았다 나는 실제로이 테스트 할 수 있지만, 첫 번째 공식은 그것은 대규모없이 당신의 무게가 dataframe 또는 NumPy와 배열에있는 경우 뭔가 같은

P = np.random.rand(24, 24) 
Q = np.random.rand(24, 24) 
w = np.random.rand(24, 1) 

np.sqrt(np.sum((w * np.power((np.abs(P) - np.abs(Q)), 2)))) 

안해야한다 - dataframe입니다 어쨌든 numpy 배열에 백업 된이 같은 배열 작업을 사용하여 잘 작동합니다. 그러나 오버 헤드를 추가하고 가중치를 사용하는 것은 실제로 의미가 없습니다 (엄지 손가락으로 데이터에 의미있는 열 이름이 있으면 데이터 프레임을 사용하십시오. 그렇지 않으면 평범한 숫자 배열로 충분해야합니다)

관련 문제