Как получить логарифм по заданному основанию для списка?
Как записать математическое выражение в питоне, выдается ошибка. Нужно чтобы log(...) по основанию 1+x**2, для различных x.
import numpy as np
x = [1, 10, 100, 1000]
print("Входные значения x: \n", x)
y = np.log(1 / np.e ** np.sin(x + 1) / (5 / 4) + (1 / x ** 15)) / np.log(1 + x ** 2)
print(y)
Получаю ошибку:
TypeError: can only concatenate list (not "int") to list
Ответы (2 шт):
Автор решения: D.Vinogradov
→ Ссылка
Как вариант через math
import math
x = [1, 10, 100, 1000]
print("Входные значения x: \n", x)
def logs(x1):
base = (1 + x1 ** 2)
ex = 1 / math.e ** math.sin(x1 + 1) / (5 / 4) + (1 / x1 ** 15)
return math.log(ex, base)
print([logs(i) for i in x])
>>> [0.40299028466113235, 0.16832640716567754, -0.0733047836576131, -0.08274280283465775]
Автор решения: Stanislav Volodarskiy
→ Ссылка
Ошибка в выражении x + 1:
$ python Python 3.10.0 (default, Oct 16 2021, 12:17:56) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. @>>> x = [1, 10, 100, 1000] @>>> x + 1 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate list (not "int") to list
Исправить можно переведя список в массив numpy:
@>>> import numpy as np @>>> x = np.array(x) @>>> x + 1 array([ 2, 11, 101, 1001])
Целиком исправленная программа:
import numpy as np
x = np.array([1, 10, 100, 1000])
print("Входные значения x: \n", x)
y = np.log(1 / np.e ** np.sin(x + 1) / (5 / 4) + (1 / x ** 15)) / np.log(1 + x ** 2)
print(y)