Python numpy вычитание массивов

How to use np.subtract() for a 2D array in Python

Many candidates are rejected or down-leveled in technical interviews due to poor performance in behavioral or cultural fit interviews. Ace your interviews with this free course, where you will practice confidently tackling behavioral interview questions.

Overview

The Python library Numpy provides us with a method called subtract() . We use this to subtract two arrays.

The numpy.subtract() method

​​The numpy.subtract() method returns the element-wise (element by element) difference between two arrays.

We can create a two-dimensional (2D) array using a list of lists in Python.

Syntax

numpy.subtract(A, B, dtype=None, out=None) 

Parameters

  • A : This is the first input array.
  • B : This is the second input array.
  • dtype : This is an optional parameter. It represents the return type of the array.
  • out : This is an optional parameter. It represents the alternative output array where the result is to be placed.

Note: If A and B have distinct shapes, they must be able to be broadcasted to a common shape for output representation.

Return value

The numpy.subtract() method returns the difference between two input arrays, element-wise.

If the out parameter is specified, this method returns an array reference to out .

Code

The following code shows how to use np.subtract() for 2D arrays.

Источник

numpy.subtract#

The arrays to be subtracted from each other. If x1.shape != x2.shape , they must be broadcastable to a common shape (which becomes the shape of the output).

out ndarray, None, or tuple of ndarray and None, optional

A location into which the result is stored. If provided, it must have a shape that the inputs broadcast to. If not provided or None, a freshly-allocated array is returned. A tuple (possible only as a keyword argument) must have length equal to the number of outputs.

where array_like, optional

This condition is broadcast over the input. At locations where the condition is True, the out array will be set to the ufunc result. Elsewhere, the out array will retain its original value. Note that if an uninitialized out array is created via the default out=None , locations within it where the condition is False will remain uninitialized.

Читайте также:  Экспорт в html файл

For other keyword-only arguments, see the ufunc docs .

Returns : y ndarray

The difference of x1 and x2, element-wise. This is a scalar if both x1 and x2 are scalars.

Equivalent to x1 — x2 in terms of array broadcasting.

>>> x1 = np.arange(9.0).reshape((3, 3)) >>> x2 = np.arange(3.0) >>> np.subtract(x1, x2) array([[ 0., 0., 0.], [ 3., 3., 3.], [ 6., 6., 6.]]) 

The — operator can be used as a shorthand for np.subtract on ndarrays.

>>> x1 = np.arange(9.0).reshape((3, 3)) >>> x2 = np.arange(3.0) >>> x1 - x2 array([[0., 0., 0.], [3., 3., 3.], [6., 6., 6.]]) 

Источник

Базовые математические операции над массивами

Теперь, когда мы знаем как формировать массивы пришло время самого главного, самого важно для чего, собственно, и был разработан пакет NumPy – к рассмотрению его математических, вычислительных возможностей. И в основе своей эти вычисления базируются на матрицах и векторах. Но, обо всем по порядку и вначале поговорим о базовых математических операциях этого пакета.

Предположим, имеется обычный список и массив, созданный на его основе:

lst = [1, 2, 3] a = np.array([1, 2, 3])

Сейчас вы увидите принципиальную разницу между двумя этими объектами. Умножим их на число 2:

lst*2 # список: [1, 2, 3, 1, 2, 3] a*2 # массив: array([2, 4, 6])

Видите, при умножении списка языка Python, он дублируется дважды, а при умножении на NumPy массив – каждый его элемент умножается математически на число 2. Если бы мы захотели то же самое реализовать непосредственно на Python, оперируя списками, то пришлось бы делать что-то вроде:

Но выполнялась бы такая конструкция дольше, чем в случае с массивом NumPy. Именно благодаря удобству и скорости библиотека NumPy и приобрела свою популярность.

Читайте также:  Python текущая папка скрипта

Пусть у нас задан тот же одномерный массив:

Все указанные в таблице операции выполняются следующим образом:

-a # унарный минус a + 2 # сложение с числом 2 + a # так тоже можно записывать a - 3 # вычитание с числом a * 5 # умножение на число a / 5 # деление на число a // 2 # целочисленное деление a ** 3 # возведение в степень 3 a % 2 # вычисление по модулю 2

Разумеется, приоритеты этих операций такие же, что и при обычных математических вычислениях. А на выходе мы получаем новый массив с соответствующими значениями.

Давайте теперь добавим еще один массив:

и посмотрим на эти же операции, но с участием двух массивов:

a - b # array([-2, -2, -2]) b + a # array([4, 6, 8]) a * b # array([ 3, 8, 15]) b / a # array([3. , 2. , 1.66666667]) b // a # array([3, 2, 1], dtype=int32) b ** a # array([ 3, 16, 125], dtype=int32) b % a # array([0, 0, 2], dtype=int32)

Везде мы видим поэлементные операции. Соответственно, чтобы они выполнялись, массивы должны быть согласованы по длине. Например, если взять массив:

a + b # ошибка: длины массивов не совпадают

то возникнет ошибка из-за несовпадения длин массивов. Но вот такая операция с двумерным массивом b сработает:

b = np.arange(1, 7) b.resize(2, 3) a + b

В этом случае массив a будет применен к каждой строке массива b и на выходе увидим результат:

Такое поведение получило название транслирование массивов. Подробнее о нем мы еще будем говорить.

Все рассмотренные операции можно распространить и на многомерные массивы, главное, чтобы они были согласованы по размерам. Я приведу два небольших примера, так как думаю, общий принцип здесь понятен. Пусть у нас трехмерный и двумерный массивы:

a = np.arange(1, 19) a.resize(3, 3, 2) b = np.ones((3, 2))

С ними можно выполнять такие очевидные операции:

И так далее. Причем, двумерный массив b может быть применен к трехмерному массиву a благодаря операции транслирования, так как их размеры согласованы. На самом деле, умножение трехмерного массива на число также реализуется через транслирование числа по всем элементам массива a.

То есть, если нам нужно произвести какие-либо математические операции с массивом и изменения сохранить в нем же, то удобно использовать такие сокращенные записи. Выполняются они очевидным образом, например, так:

a = np.array([1, 2, 6, 8]) a += 5 b = np.ones(4) b *= a

И так далее. Но есть один нюанс работы этих операторов. Если, например, массив b определить с типом данных float64:

Читайте также:  Typescript eslint parser npm

а массив a имеет тип int32 (можно посмотреть через свойство a.dtype), то операция:

приведет к ошибке. С чем это связано? Дело в том, что результатом сложения вещественного числа с целочисленным, итоговое значение представляет собой вещественное число. Но тип данных массива a – целочисленный и он не может сохранять вещественные числа. Отсюда и возникает эта ошибка. Вообще, следует помнить правило:

При выполнении арифметических операций тип данных автоматически приводится к более общему.

То есть, при работе с целочисленными и вещественными числами на выходе получаем вещественные. При работе с вещественными и комплексными – комплексные. И так далее. Всегда результатом имеем более общий тип данных.

Все описанные математические операции можно комбинировать и записывать в виде:

Здесь круглые скобки, как и в математике, операция изменения приоритетов, то есть, сначала будет выполнено сложение, затем, умножение и в последнюю очередь вычитание.

Вот так работают и используются базовые математические операции в пакете NumPy при работе с массивами.

Видео по теме

#1. Пакет numpy — установка и первое знакомство | NumPy уроки

#2. Основные типы данных. Создание массивов функцией array() | NumPy уроки

#3. Функции автозаполнения, создания матриц и числовых диапазонов | NumPy уроки

#4. Свойства и представления массивов, создание их копий | NumPy уроки

#5. Изменение формы массивов, добавление и удаление осей | NumPy уроки

#6. Объединение и разделение массивов | NumPy уроки

#7. Индексация, срезы, итерирование массивов | NumPy уроки

#8. Базовые математические операции над массивами | NumPy уроки

#9. Булевы операции и функции, значения inf и nan | NumPy уроки

#10. Базовые математические функции | NumPy уроки

#11. Произведение матриц и векторов, элементы линейной алгебры | NumPy уроки

#12. Множества (unique) и операции над ними | NumPy уроки

#13. Транслирование массивов | NumPy уроки

© 2023 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта

Источник

Оцените статью