Умножение списка на число
Студент Макс узнал, что в Python умножать можно не только числа, но и другие объекты, например, строку на число:
>>> "Max" * 3 'MaxMaxMax'
«Вау!» — подумал Макс — «А что если умножить список на число?»:
>>> [42, 26] * 3 [42, 26, 42, 26, 42, 26]
Значит можно создать двумерный массив очень кратко и элегантно?
arr = [[]] * 3 arr[0].append(10) arr[1].append(20) arr[2].append(30)
Макс ожидал получить:
[[10], [20], [30]]
[[10, 20, 30], [10, 20, 30], [10, 20, 30]]
Как же так?! Дело в том, что умножение списка на число не копирует сам объект, а лишь ссылку на него. Все три элемента arr ссылаются на один и тот же список. Легко проверить, сравнив адреса объектов:
>>> arr[0] is arr[1] True >>> id(arr[0]), id(arr[1]) (4400840776, 4400840776)

Аналогично в случае классов:
class Dummy: . arr = [Dummy()] * 2 arr[0].x = 10 arr[1].x = 20 print(arr[0].x, arr[0] is arr[1]) # 20 True
А вот с числами, строками и кортежами умножение списка будет работать как ожидал Макс, потому что это неизменяемые типы. Вот такая тонкость, которую нужно знать. Максу следовало бы написать так:
arr = [[] for _ in range(3)] arr[0].append(10) arr[1].append(20) arr[2].append(30) >>> arr [[10], [20], [30]]
Менее кратко, но зато работает без сюрпризов: каждую итерацию создается новый пустой список.
Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway
Как умножить каждый элемент массива с шагом n?
Здравствуйте.
Имеется массив из единиц (array1). Необходимо первый элемент этого массива умножить на корень из 2, второй — на 2, третий — на 2 корня из двух, четвертый — на 4 и т. д.
Как это сделать? Никак не пойму. Cам пробовал так, не работает:
for i in range(len(array1)): array1[i] *= sqrt(2) i += 1 print(amplitudes_array)
- Вопрос задан более трёх лет назад
- 3856 просмотров
1 комментарий
Оценить 1 комментарий
в одну строку
lst = array1
x = [lst[i]*(sqrt(2)**(i+1)) for i in range(0, len(lst))]
Решения вопроса 5

import math def getAmplitudesArray(array): amplitudesArray = [] multiplier = 2 for item in array: amplitudesArray.append(float(item * math.sqrt(multiplier))) multiplier *= 2 return amplitudesArray array = [1] * 10 print(getAmplitudesArray(array)) >>> [1.4142135623730951, 2.0, 2.8284271247461903, 4.0, 5.656854249492381, 8.0, 11.313708498984761, 16.0, 22.627416997969522, 32.0]
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

Разрабатываю научное ПО на языке Python.
from math import sqrt array = [1] * 10 for i in range(len(array)): array[i] *= sqrt(2) ** (i + 1) print(array)
Если используются массивы из numpy, то необходимо проверить их тип. Если dtype целочисленный, то у вас всегда будет получаться целое число.
import numpy as np array = np.ones(10, dtype='int32') for i in range(len(array)): array[i] *= np.sqrt(2) ** (i + 1) print(array)
Чтобы избежать этого, либо делаете новый массив, либо этот конвертируете в тип float, либо изначально создаете массив типа float.
import numpy as np array = np.ones(10, dtype='f4') for i in range(len(array)): array[i] *= np.sqrt(2) ** (i + 1) print(array)
Как умножить каждый элемент js массива на 2
Можно воспользоваться методом arr.forEach он позволяет запускать функцию для каждого элемента массива.
18 октября 2022
Воспользуемся методом reduce() , который вызывает функцию-коллбэк на каждом элементе массива, а результат вызова накапливает в аккумуляторе.
const arr = [1, 2, 3, 4, 5]; const multiplyByTwo = (array) => array .reduce((acc, el) => acc.push(el * 2); return acc; >, []); console.log(multiplyByTwo(arr)); // => [2, 4, 6, 8, 10]
20 октября 2021
Для этого можно воспользоваться методом map() , который перебирает и преобразовывает каждый элемент массива согласно колбек функции, которая в него передана. Например:
x * 2); console.log(newCollection); // => [2, 4, 6];
NumPy, часть 2: базовые операции над массивами

Здравствуйте! Я продолжаю работу над пособием по python-библиотеке NumPy.
В прошлой части мы научились создавать массивы и их печатать. Однако это не имеет смысла, если с ними ничего нельзя делать.
Сегодня мы познакомимся с операциями над массивами.
Базовые операции
Математические операции над массивами выполняются поэлементно. Создается новый массив, который заполняется результатами действия оператора.
:1: RuntimeWarning: divide by zero encountered in true_divide
Для этого, естественно, массивы должны быть одинаковых размеров.
File
Также можно производить математические операции между массивом и числом. В этом случае к каждому элементу прибавляется (или что вы там делаете) это число.
NumPy также предоставляет множество математических операций для обработки массивов:
Полный список можно посмотреть здесь.
Многие унарные операции, такие как, например, вычисление суммы всех элементов массива, представлены также и в виде методов класса ndarray.
Индексы, срезы, итерации
Одномерные массивы осуществляют операции индексирования, срезов и итераций очень схожим образом с обычными списками и другими последовательностями Python (разве что удалять с помощью срезов нельзя).
File У многомерных массивов на каждую ось приходится один индекс. Индексы передаются в виде последовательности чисел, разделенных запятыми (то бишь, кортежами):
Когда индексов меньше, чем осей, отсутствующие индексы предполагаются дополненными с помощью срезов:
b[i] можно читать как b[i, ]. В NumPy это также может быть записано с помощью точек, как b[i, . ].
Например, если x имеет ранг 5 (то есть у него 5 осей), тогда
- x[1, 2, . ] эквивалентно x[1, 2, :, :, :],
- x[. , 3] то же самое, что x[:, :, :, :, 3] и
- x[4, . , 5, :] это x[4, :, :, 5, :].
Итерирование многомерных массивов начинается с первой оси:
Однако, если нужно перебрать поэлементно весь массив, как если бы он был одномерным, для этого можно использовать атрибут flat:
Как уже говорилось, у массива есть форма (shape), определяемая числом элементов вдоль каждой оси:
Форма массива может быть изменена с помощью различных команд:
Порядок элементов в массиве в результате функции ravel() соответствует обычному "C-стилю", то есть, чем правее индекс, тем он "быстрее изменяется": за элементом a[0,0] следует a[0,1]. Если одна форма массива была изменена на другую, массив переформировывается также в "C-стиле". Функции ravel() и reshape() также могут работать (при использовании дополнительного аргумента) в FORTRAN-стиле, в котором быстрее изменяется более левый индекс.
Метод reshape() возвращает ее аргумент с измененной формой, в то время как метод resize() изменяет сам массив:
Если при операции такой перестройки один из аргументов задается как -1, то он автоматически рассчитывается в соответствии с остальными заданными:
Объединение массивов
Несколько массивов могут быть объединены вместе вдоль разных осей с помощью функций hstack и vstack.
hstack() объединяет массивы по первым осям, vstack() — по последним:
Функция column_stack() объединяет одномерные массивы в качестве столбцов двумерного массива:
Аналогично для строк имеется функция row_stack().
Разбиение массива
Используя hsplit() вы можете разбить массив вдоль горизонтальной оси, указав либо число возвращаемых массивов одинаковой формы, либо номера столбцов, после которых массив разрезается "ножницами":
Функция vsplit() разбивает массив вдоль вертикальной оси, а array_split() позволяет указать оси, вдоль которых произойдет разбиение.
Копии и представления
При работе с массивами, их данные иногда необходимо копировать в другой массив, а иногда нет. Это часто является источником путаницы. Возможно 3 случая:
Вообще никаких копий
Простое присваивание не создает ни копии массива, ни копии его данных:
Python передает изменяемые объекты как ссылки, поэтому вызовы функций также не создают копий.
Представление или поверхностная копия
Разные объекты массивов могут использовать одни и те же данные. Метод view() создает новый объект массива, являющийся представлением тех же данных.
Срез массива это представление:
Глубокая копия
Метод copy() создаст настоящую копию массива и его данных:
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте