Из документации numpy по логарифмам я нашел функции для ввода логарифма с базой e, 2 и 10:
import numpy as np
np.log(np.e**3) #3.0
np.log2(2**3) #3.0
np.log10(10**3) #3.0
Однако, как взять логарифм с базой n (например, 42) в numpy?
Из документации numpy по логарифмам я нашел функции для ввода логарифма с базой e, 2 и 10:
import numpy as np
np.log(np.e**3) #3.0
np.log2(2**3) #3.0
np.log10(10**3) #3.0
Однако, как взять логарифм с базой n (например, 42) в numpy?
Чтобы получить логарифм с пользовательской базой, используя math.log
:
import math
number = 74088 # = 42**3
base = 42
exponent = math.log(number, base) # = 3
Чтобы получить логарифм с пользовательской базой, используя numpy.log
:
import numpy as np
array = np.array([74088, 3111696]) # = [42**3, 42**4]
base = 42
exponent = np.log(array) / np.log(base) # = [3, 4]
Как и следовало ожидать, обратите внимание, что по умолчанию np.log(np.e) == 1.0
.
Напоминаем, что правило изменения логарифмической базы:
Кажется, это тоже работает довольно хорошо (не проверено), хотя и не использует numpy:
def log_n_of_n(base, y):
x = 1
last_plus = x
last_minus = x
result = 0
last_result = result
step = 1
while result != y:
result = base**x
if result < y:
x += step
if last_plus == result:
step = step * 0.1
last_plus = result
else:
x -= step
if last_minus == result:
step = step * 0.1
last_minus = result
if last_result == result or len(str(x)) > 18:
return x + 1
last_result = result
return x + (1 if int(step) == 1 else 0)
# loop with an escape to exit
base = input('Enter the logrithm base:\n').strip()
while True:
y = input('Enter the number you want to get the log of or x to exit:\n').strip()
if y.lower() == 'x':
break
try:
print (log_n_of_n(int(base), int(y)))
except:
print('Invalid input:', y)