Математические операции над массивами python

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 3 логотип

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

Источник

Читайте также:  Code read php file
Оцените статью