Вывод: результат список * 2 — это не баг, а нормальное поведение обычного списка python, для поэлементной математики нужен массив numpy.
Причина. Оператор умножения для списка python определён как повторение последовательности — это заложено в сам тип list, независимо от того, что внутри лежат числа. python не знает заранее, что ты хочешь именно математику, а не повторение структуры данных, поэтому и работает так, как работает.
Решение. Преврати список в массив numpy: import numpy as np, arr = np.array(твой_список). У типа ndarray оператор умножения переопределён иначе — он применяется к каждому элементу отдельно, потому что весь смысл numpy как раз в математике над данными, а не в манипуляции структурой как таковой.
Проверка у себя. Если после np.array(список) операция всё равно ведёт себя как со списком — скорее всего, преобразование не произошло, или переменная случайно осталась старым списком, а не результатом np.array. Выведи type(твоя_переменная) и убедись, что там numpy.ndarray, а не list.
Ещё момент про типы данных внутри. Если список содержит вперемешку числа и строки, np.array создаст массив с типом object или строковым типом, и математика опять не сработает как ожидается — numpy эффективен именно на однородных числовых данных, разнородный список сначала стоит почистить.
Про версии: поведение np.array и базовых операций стабильно уже много лет и от версии numpy почти не зависит для таких простых случаев.
Лучший ответ
Датахакер
Датахакер
Как создать массив numpy из списка python?
я тоже сначала не понимал почему список просто задваивается, оказывается это норм для питона так