- How to perform mathematical operations on array elements in python ?
- Add a number to all the elements of an array
- Subtract a number to all the elements of an array
- Multiply a number to all the elements of an array
- Multiply array elements by another array elements
- Square number of each array elements
- Root square number of each array elements
- Using a python function
- Element-wise matrix product
- Numpy multiply function (rows)
- Numpy multiply function (columns)
- References
- Benjamin
- NumPy, часть 2: базовые операции над массивами
- Базовые операции
- Индексы, срезы, итерации
- Объединение массивов
- Разбиение массива
- Копии и представления
- Вообще никаких копий
- Представление или поверхностная копия
- Глубокая копия
How to perform mathematical operations on array elements in python ?
Examples of how to perform mathematical operations on array elements («element-wise operations») in python:
- Add a number to all the elements of an array
- Subtract a number to all the elements of an array
- Multiply a number to all the elements of an array
- Multiply array elements by another array elements
- Square number of each array elements
- Root square number of each array elements
- Using a python function
- Element-wise matrix product
- Numpy multiply function (rows)
- Numpy multiply function (columns)
- References
Add a number to all the elements of an array
Let’s consider the following array:
>>> import numpy as np
>>> A = np.arange(9).reshape(3,3)
>>> A
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
to add a constant number, a solution is to do:
>>> A + 1
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> B = np.ones(9).reshape(3,3)
>>> B
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
>>> A + B
array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.]])
>>> B = np.arange(10,19).reshape(3,3)
>>> B
array([[10, 11, 12],
[13, 14, 15],
[16, 17, 18]])
>>> A + B
array([[10, 12, 14],
[16, 18, 20],
[22, 24, 26]])
Subtract a number to all the elements of an array
Example with a subtraction:
>>> import numpy as np
>>> A = np.arange(9).reshape(3,3)
to subtract a number to all the elements of an array, a solution is to do:
>>> A - 1
array([[-1, 0, 1],
[ 2, 3, 4],
[ 5, 6, 7]])
>>> B = np.ones(9).reshape(3,3)
>>> A - B
array([[-1., 0., 1.],
[ 2., 3., 4.],
[ 5., 6., 7.]])
>>> B = np.arange(10,19).reshape(3,3)
>>> B
array([[10, 11, 12],
[13, 14, 15],
[16, 17, 18]])
>>> A - B
array([[-10, -10, -10],
[-10, -10, -10],
[-10, -10, -10]])
Multiply a number to all the elements of an array
>>> A = np.arange(9).reshape(3,3)
>>> A
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> A * 2
array([[ 0, 2, 4],
[ 6, 8, 10],
[12, 14, 16]])
Multiply array elements by another array elements
Note: arrays with same size
>>> A = np.arange(9).reshape(3,3)
>>> A
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> B = np.arange(10,19).reshape(3,3)
>>> B
array([[10, 11, 12],
[13, 14, 15],
[16, 17, 18]])
>>> A * B
array([[ 0, 11, 24],
[ 39, 56, 75],
[ 96, 119, 144]])
Square number of each array elements
>>> A = np.arange(9).reshape(3,3)
>>> A
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> A ** 2
array([[ 0, 1, 4],
[ 9, 16, 25],
[36, 49, 64]])
Root square number of each array elements
To get the root square of each array elements, a solution is to use the numpy function sqrt()
>>> A = np.arange(9).reshape(3,3)
>>> A
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> A ** 2
array([[ 0, 1, 4],
[ 9, 16, 25],
[36, 49, 64]])
>>> np.sqrt(A**2)
array([[ 0., 1., 2.],
[ 3., 4., 5.],
[ 6., 7., 8.]])
Using a python function
>>> A = np.arange(9).reshape(3,3)
>>> A
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> def my_custom_function(x):
. return x**2 + 1
.
>>> my_custom_function(A)
array([[ 1, 2, 5],
[10, 17, 26],
[37, 50, 65]])
Note: to use well know functions such as sinus, cosinus, etc do not use the math module but numpy (numpy Mathematical functions):
>>> import math
>>> def my_custom_function(x):
. return math.sin(x)
.
>>> my_custom_function(A)
Traceback (most recent call last):
File "", line 1, in
File "", line 2, in my_custom_function
TypeError: only length-1 arrays can be converted to Python scalars
just replace math.sin(x) by np.sin(x)
>>> def my_custom_function(x):
. return np.sin(x)
.
>>> my_custom_function(A)
array([[ 0. , 0.84147098, 0.90929743],
[ 0.14112001, -0.7568025 , -0.95892427],
[-0.2794155 , 0.6569866 , 0.98935825]])
>>> np.sin(A)
array([[ 0. , 0.84147098, 0.90929743],
[ 0.14112001, -0.7568025 , -0.95892427],
[-0.2794155 , 0.6569866 , 0.98935825]])
Element-wise matrix product
>>> import numpy as np
>>> A = np.arange(4).reshape(2,2)
>>> A = np.array([A[:],A[:]*2,A[:]*3])
>>> A
array([[[0, 1],
[2, 3]],
[[0, 2],
[4, 6]],
[[0, 3],
[6, 9]]])
>>> B = np.array((4,6))
>>> B
array([4, 6])
>>> B @ A
array([[12, 22],
[24, 44],
[36, 66]])
>>> A = np.arange(3).reshape(3,1)
>>> A
array([[0],
[1],
[2]])
>>> B = np.arange(3).reshape(1,3)
>>> B
array([[0, 1, 2]])
>>> B @ A
array([[5]])
Numpy multiply function (rows)
>>> A = np.arange(9).reshape(3,3)
>>> A
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> B = np.arange(3)
>>> B
array([0, 1, 2])
>>> np.multiply(A,B)
array([[ 0, 1, 4],
[ 0, 4, 10],
[ 0, 7, 16]])
Numpy multiply function (columns)
>>> C = B[:,np.newaxis]
>>> C
array([[0],
[1],
[2]])
>>> np.multiply(A,C)
array([[ 0, 0, 0],
[ 3, 4, 5],
[12, 14, 16]])
References
Links | Site |
---|---|
Introduction to Python Operator | data-flair.training |
numpy.multiply | stackoverflow |
Elementwise multiplication of NumPy arrays of matrices | stackoverflow |
How to get element-wise matrix multiplication (Hadamard product) in numpy? | stackoverflow |
numpy Mathematical functions | docs.scipy.org |
What is the purpose of meshgrid in Python / NumPy? | stackoverflow |
How to merge mesh grid points from two rectangles in python? | stackoverflow |
Benjamin
Greetings, I am Ben! I completed my PhD in Atmospheric Science from the University of Lille, France. Subsequently, for 12 years I was employed at NASA as a Research Scientist focusing on Earth remote sensing. Presently, I work with NOAA concentrating on satellite-based Active Fire detection. Python, Machine Learning and Open Science are special areas of interest to me.
Skills
NumPy, часть 2: базовые операции над массивами
Здравствуйте! Я продолжаю работу над пособием по python-библиотеке NumPy.
В прошлой части мы научились создавать массивы и их печатать. Однако это не имеет смысла, если с ними ничего нельзя делать.
Сегодня мы познакомимся с операциями над массивами.
Базовые операции
Математические операции над массивами выполняются поэлементно. Создается новый массив, который заполняется результатами действия оператора.
:1: RuntimeWarning: divide by zero encountered in true_divide
Для этого, естественно, массивы должны быть одинаковых размеров.
Также можно производить математические операции между массивом и числом. В этом случае к каждому элементу прибавляется (или что вы там делаете) это число.
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 в комментарий заключайте его в теги
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов