파이썬에서 N/2 ** M 형식으로 부동 소수점 숫자와 가장 가까운 표현을 찾고 싶습니다. 여기서 N과 M은 정수. scipy.optimise에서 최소화 함수를 사용하려고 시도했지만 N과 M이 정수 인 경우에만 국한 될 수는 없습니다.N/2 형식의 가장 가까운 표현을 찾기 위해 계산 속도를 올리는 방법 ** M
M 및 N 값을 반복하여 최소값을 구하는 간단한 구현을 사용했지만 결과적으로 계산 비용이 많이 들고 많은 수의 배열에 많은 시간이 걸렸습니다. 더 좋은 방법은 무엇일까요?
내 간단한 구현은 다음과 같습니다 :
import numpy as np
def ValueRepresentation(X):
M, Dp = X
return M/(2**Dp)
def Diff(X, value):
return abs(ValueRepresentation(X) - value)
def BestApprox(value):
mindiff = 1000000000
for i in np.arange(0, 1000, 1):
for j in np.arange(0, 60, 1):
diff = Diff([i, j], value)
if diff < mindiff:
mindiff = diff
M = i
Dp = j
return M, Dp
N과 M 모두에 대한 루핑은 광의로 비효율적입니다. Loop over M 만 가능합니다. (가능한 값의 집합이 더 작기 때문에) 해당 N을 계산합니다. 허용 범위를 벗어나면 거부합니다. – jasonharper
또한 numpy를 사용하지만 여전히 개별 기초, 그래서 당신이 가능한 배열/매트릭스 최적화에서 얻을 수있는 전혀 이익이되지 않습니다 –
아마도 내가 뭔가를 내려다 보지하지만 이미 특정 부동 소수점 값을 가지고 있기 때문에, 그리고 그 이진 표현은 이미 지수를 저장하고 있기 때문에 기수 2의 가수, 그 값들을 추출 할 수 없습니까? – brm