Как получить логарифм по заданному основанию для списка?

Как записать математическое выражение в питоне, выдается ошибка. Нужно чтобы 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)
→ Ссылка