Перейти к содержимому

Как умножить каждый элемент массива на число python

  • автор:

Умножение списка на число

Студент Макс узнал, что в 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)

Диаграмма: все элементы arr указывают на один и тот же список.

Аналогично в случае классов:

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

AnnTHony

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 Комментировать

Avernial

Разрабатываю научное ПО на языке 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 3 логотип

Здравствуйте! Я продолжаю работу над пособием по 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
  • Реклама на сайте

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *