Как использовать метод numpy.where() в python
Содержание:
- Пример 2: Объединение Трех 1-D Массивов По Вертикали С Помощью функции numpy.vstack
- Можем Ли Мы Найти Разницу Между Двумя Массивами Numpy С Разными Формами?
- Массив
- Массив нарезки
- Сортировка, поиск, подсчет¶
- 1.4.1.6. Copies and views¶
- Массив Python
- Тест производительности
- Нужда в numpy.ones
- 1.4.1.5. Indexing and slicing¶
- Делать математику с NumPy
- Пример 1: Базовый кейс для изучения работы Numpy Vstack
- Следовательно, вы можете видеть выход со всеми параметрами.
- Способы печатать Numpy Array в Python
- Функция Numpy mgrid() v/s meshgrid() в Python
- Creating RGBA images
- Агрегирование в NumPy
- Метод Numpy zeros() в Python
- Арифметические операции над массивами NumPy
- Синтаксис
- Что мы подразумеваем под универсальными функциями NumPy?
- Creating RGB Images
- Синтаксис
- Различные методы нормализации массива NumPy
Пример 2: Объединение Трех 1-D Массивов По Вертикали С Помощью функции numpy.vstack
Давайте перейдем ко второму примеру, здесь мы возьмем три 1-D массива и объединим их в один href=”https://en.wikipedia.org/wiki/Array_data_structure”>массив. href=”https://en.wikipedia.org/wiki/Array_data_structure”>массив.
import numpy as np.array() print ("First Input array : \n", x) .array() print ("Second Input array : \n", y) .array() print ("Third Input array : \n", z) .vstack((x, y, z)) print ("Vertically stacked array:\n ", res)
Выход:
Объяснение
В приведенном выше примере мы сделали все то же самое, что и в примере 1, за исключением добавления одного дополнительного массива. В примере 1 мы видим, что существует два массива. Но в этом примере мы использовали три массива “x, y, z”. И с помощью np.vstack() мы соединили их вместе по рядам (вертикально).
Можем Ли Мы Найти Разницу Между Двумя Массивами Numpy С Разными Формами?
Простыми словами, Нет, мы не можем найти различия или использовать функцию вычитания numpy в двух массивах numpy, которые имеют разные формы.
Давайте рассмотрим это на одном примере,
import numpy as np a1 = , ] a2 = , ] print ("1st Input array : ", a1) print ("2nd Input array : ", a2) .subtract(a1, a2) print ("Difference of two input arrays : ", dif)
Выход:
Объяснение
Если форма двух массивов numpy будет отличаться, то мы получим valueerror. Ошибка значения будет говорить что – то вроде, например.
ValueError: operands could not be broadcast together with shapes (2,3) (2,)
Здесь, в этом примере, мы получаем valueerror, потому что входной массив a2 имеет другую форму, чем входной массив a1. Чтобы получить разницу без какой-либо ошибки значения, обязательно проверьте форму массивов.
Массив
Массив numpy – это сетка значений одного типа. Мы можем инициализировать массив NumPy с помощью вложенного списка Python. Затем мы можем получить к ним доступ, используя их index. Также в NumPy есть функция, с помощью которой вы можете создавать различные типы массивов.
Смотрите следующий код, чтобы понять объявление массива numpy и доступ к элементам.
import numpy # Create a rank 1 array a = numpy.array() print('print rank 1 array:') # access the array using their index print('print using their index: a= ', a) a = 5 # modify the array print('print using slicing : ', a) # slicing can be used also # print the whole list print('Print the whole array : ', a) # Create a rank 2 array using nested Python list b = numpy.array(, ]) print('\nprint rank 2 array') # access them using their index print('print using their index: b= ', b, ' b= ',b) print('print using slicing ', b) # 1st slice for row, 2nd for column # initialize a zero matrix a = numpy.zeros((2, 2)) print('\nprint a 2-by-2 zero matrix:\n', a) # Create an array of all ones b = numpy.ones((2, 2)) print('\nprint a 2-by-2 all one matrix:\n', b) # Create a constant array c = numpy.full((3, 3), 6) print('\nprint a 3-by-3 constant matrix for value = 6:\n', c) # Create a 3x3 identity matrix d = numpy.eye(3) print('\nprint a 3-by-3 identity matrix:\n', d)
Результатом кода примера массива будет:
print rank 1 array: print using their index: a= 3 print using slicing : Print the whole array : print rank 2 array print using their index: b= 10 b= 20 print using slicing `40 50` print a 2-by-2 zero matrix: ] print a 2-by-2 all one matrix: ] print a 3-by-3 constant matrix for value = 6: ] print a 3-by-3 identity matrix: ]
Массив нарезки
Все идет нормально; Создание и индексация массивов выглядит знакомо.
Теперь мы подошли к нарезке массивов, и это одна из функций, которая создает проблемы для начинающих массивов Python и NumPy.
Структуры, такие как списки и массивы NumPy, могут быть нарезаны. Это означает, что подпоследовательность структуры может быть проиндексирована и извлечена.
Это наиболее полезно при машинном обучении при указании входных и выходных переменных или разделении обучающих строк из строк тестирования.
Нарезка задается с помощью оператора двоеточия ‘:’ с ‘от’ а также ‘в‘Индекс до и после столбца соответственно. Срез начинается от индекса «от» и заканчивается на один элемент перед индексом «до».
Давайте рассмотрим несколько примеров.
Одномерная нарезка
Вы можете получить доступ ко всем данным в измерении массива, указав срез «:» без индексов.
При выполнении примера печатаются все элементы в массиве.
Первый элемент массива можно разрезать, указав фрагмент, который начинается с индекса 0 и заканчивается индексом 1 (один элемент перед индексом «до»)
Выполнение примера возвращает подмассив с первым элементом.
Мы также можем использовать отрицательные индексы в срезах. Например, мы можем нарезать последние два элемента в списке, начав срез с -2 (второй последний элемент) и не указав индекс «до»; это берет ломтик до конца измерения.
Выполнение примера возвращает подмассив только с двумя последними элементами.
Двумерная нарезка
Давайте рассмотрим два примера двумерного среза, которые вы, скорее всего, будете использовать в машинном обучении.
Разделение функций ввода и вывода
Распространено загруженные данные на входные переменные (X) и выходную переменную (y).
Мы можем сделать это, разрезая все строки и все столбцы до, но перед последним столбцом, затем отдельно индексируя последний столбец.
Для входных объектов мы можем выбрать все строки и все столбцы, кроме последнего, указав ‘:’ в индексе строк и: -1 в индексе столбцов.
Для выходного столбца мы можем снова выбрать все строки, используя ‘:’, и индексировать только последний столбец, указав индекс -1.
Собрав все это вместе, мы можем разделить 3-колоночный 2D-набор данных на входные и выходные данные следующим образом:
При выполнении примера печатаются разделенные элементы X и y
Обратите внимание, что X — это двумерный массив, а y — это одномерный массив
Сплит поезд и тестовые ряды
Обычно загруженный набор данных разбивают на отдельные наборы поездов и тестов.
Это разделение строк, где некоторая часть будет использоваться для обучения модели, а оставшаяся часть будет использоваться для оценки мастерства обученной модели.
Для этого потребуется разрезать все столбцы, указав «:» во втором индексе измерения. Набор обучающих данных будет содержать все строки от начала до точки разделения.
Тестовым набором данных будут все строки, начиная с точки разделения до конца измерения.
Собрав все это вместе, мы можем разделить набор данных в надуманной точке разделения 2.
При выполнении примера выбираются первые две строки для обучения и последняя строка для набора тестов.
Сортировка, поиск, подсчет¶
Команда | Описание |
---|---|
sort(a) | отсортированная копия массива |
lexsort(keys) | Perform an indirect sort using a sequence of keys. |
argsort(a) | аргументы, которые упорядочивают массив |
array.sort() | сортирует массив на месте (метод массива) |
msort(a) | копия массива отсортированная по первой оси |
sort_complex(a) | сортировка комплексного массива по действительной части, потом по мнимой |
argmax(a) | индексы максимальных значений вдоль оси |
nanargmax(a) | индексы максимальных значений вдоль оси (игнорируются NaN). |
argmin(a) | индексы минимальных значений вдоль оси |
nanargmin(a) | индексы минимальных значений вдоль оси (игнорируются NaN). |
argwhere(a) | массив индексов ненулевых элементов. данные сгруппированы по элементам(,….) |
nonzero(a) | массивы индексов ненулевых элементов. сгруппированы по размерностям (индексы X, индексы Y, т.д.) |
flatnonzero(a) | индексы ненулевых элементов в плоской версии массива |
where(condition, ) | возвращает массив составленный из элементов x (если выполнено условие) и y (в противном случае). Если задано только condition, то выдает его «не нули». |
searchsorted(a, v) | индексы мест, в которые нужно вставить элементы вектора для сохранения упорядоченности массива |
extract(condition, a) | возвращает элементы (одномерный массив), по маске (condition) |
count_nonzero(a) | число ненулевых элементов в массиве |
1.4.1.6. Copies and views¶
A slicing operation creates a view on the original array, which is
just a way of accessing array data. Thus the original array is not
copied in memory. You can use to check if two arrays
share the same memory block. Note however, that this uses heuristics and may
give you false positives.
When modifying the view, the original array is modified as well:
>>> a = np.arange(10) >>> a array() >>> b = a) >>> np.may_share_memory(a, b) True >>> b = 12 >>> b array() >>> a # (!) array() >>> a = np.arange(10) >>> c = a) >>> np.may_share_memory(a, c) False
This behavior can be surprising at first sight… but it allows to save both
memory and time.
Массив Python
Python поддерживает все операции, связанные с массивом через объект своего списка. Начнем с одномерного инициализации массива.
Пример массива Python
Элементы массива Python определены в скобках И они разлучены запятыми. Ниже приведен пример объявления одномерного массива Python.
arr = print (arr) print (arr) print (arr)
Выход из двухмерного массива пример программы будет:
3 5
Индексирование массива начинается от 0. Таким образом, значение индекса 2 переменной ARR составляет 3.
В некоторых других языках программирования, такие как Java, когда мы определяем массив, нам также нужно определить тип элемента, поэтому мы ограничиваем хранение только в том виде данных в массиве. Например, умеет хранить только целые данные.
Но Python дает нам гибкость иметь различные данные данных в том же массиве. Это круто, верно? Давайте посмотрим пример.
student_marks = marks = student_marks+student_marks print(student_marks + ' has got in total = %d + %f = %f ' % (student_marks, student_marks, marks ))
Он дает следующий выход:
Akkas has got in total = 45 + 36.500000 = 81.500000 marks
В приведенном выше примере вы можете увидеть это, Массив имеют три типа данных – строка, int и float.
Python многомерный массив
Двухмерный массив в Python может быть объявлен следующим образом.
arr2d = , ] print(arr2d) # prints elements of row 0 print(arr2d) # prints elements of row 1 print(arr2d) # prints element of row = 1, column = 1
Это даст следующий вывод:
4
Точно так же мы можем определить трехмерный массив или многомерный массив в Python.
Примеры массива Python
Теперь, когда мы знаем, как определить и инициализировать массив в Python. Мы рассмотрим разные операции, которые мы можем выполнить на массиве Python.
Массив Python, проходящая с использованием для петли
Мы можем использовать для петли для прохождения сквозь элементы массива. Ниже приведен простой пример для цикла для прохождения через массив.
arrayElement = for i in range(len(arrayElement)): print(arrayElement)
Ниже изображения показывает вывод, создаваемый вышеупомянутым примером примера массива.
Пересекающий 2D-массив, используя для петли
Следующий код распечатает элементы ROW-WISE, а затем следующая часть печатает каждый элемент данного массива.
arrayElement2D = , ] for i in range(len(arrayElement2D)): print(arrayElement2D) for i in range(len(arrayElement2D)): for j in range(len(arrayElement2D)): print(arrayElement2D)
Это выведет:
Python Array Append
arrayElement = arrayElement.append('Four') arrayElement.append('Five') for i in range(len(arrayElement)): print(arrayElement)
Новый элемент четыре и пять будут добавлены в конце массива.
One 2 Three Four Five
Вы также можете добавить массив на другой массив. Следующий код показывает, как вы можете сделать это.
arrayElement = newArray = arrayElement.append(newArray); print(arrayElement)
]
Теперь наш одномерный массив наращивания превращается в многомерное массив.
Массив Python размер
Мы можем использовать Функция для определения размера массива. Давайте посмотрим на простой пример для длины массива Python.
arr = arr2d = ,] print(len(arr)) print(len(arr2d)) print(len(arr2d)) print(len(arr2d))
Нарезание массива Python
Python предоставляет особый способ создания массива из другого массива, используя нотацию среза. Давайте посмотрим на несколько примеров ломтиков наращиваний Python.
arr = #python array slice arr1 = arr #start to index 2 print(arr1) arr1 = arr #index 2 to end of arr print(arr1) arr1 = arr #start to index 2 print(arr1) arr1 = arr #copy of whole arr print(arr1) arr1 = arr # from index 1 to index 5 with step 2 print(arr1)
Ниже приведены изображение Python Array Slice Program Example.
Мы можем вставить элемент в массиве, используя функция.
arr = arr.insert(3,10) print(arr)
Python Array POP.
Мы можем вызвать функцию POP на массиве, чтобы удалить элемент из массива по указанному индексу.
arr = arr.insert(3,10) print(arr) arr.pop(3) print(arr)
Это все о массиве Python и разных операций, которые мы можем выполнить для массивов в Python.
Тест производительности
Мы не должны чередовать векторизованную операцию numpy вместе с циклом. Это резко снижает производительность, так как код повторяется с использованием собственного.
Например, в приведенном ниже фрагменте показано, как не следует использовать numpy.
for i in np.arange(100): pass
Рекомендуемый способ – напрямую использовать операцию numpy.
np.arange(100)
Давайте проверим разницу в производительности с помощью модуля timeit.
import timeit import numpy as np # For smaller arrays print('Array size: 1000') # Time the average among 10000 iterations print('range():', timeit.timeit('for i in range(1000): pass', number=10000)) print('np.arange():', timeit.timeit('np.arange(1000)', number=10000, setup='import numpy as np')) # For large arrays print('Array size: 1000000') # Time the average among 10 iterations print('range():', timeit.timeit('for i in range(1000000): pass', number=10)) print('np.arange():', timeit.timeit('np.arange(1000000)', number=10, setup='import numpy as np'))
Вывод:
Array size: 1000 range(): 0.18827421900095942 np.arange(): 0.015803234000486555 Array size: 1000000 range(): 0.22560399899884942 np.arange(): 0.011916546000065864
Как видите, numpy.arange() особенно хорошо работает для больших последовательностей. Это почти в 20 раз (!!) быстрее обычного кода Python для размера всего 1000000, который будет лучше масштабироваться только для больших массивов.
Следовательно, numpy.arange() должен быть единодушным выбором среди программистов при работе с большими массивами. Для небольших массивов, когда разница в производительности не так велика, вы можете использовать любой из двух методов.
Нужда в numpy.ones
Большинство из вас пришли к этой статье, чтобы узнать, как использовать numpy.ones в python. Итак, я думаю, что вы все довольно много знаете о математике, поскольку numpy-это в основном математические операции с большими данными. Нам часто приходится заполнять нашу матрицу всеми единицами во время матричных операций в математике. Чтобы достичь этого в программировании на python без десятков строк кода, у нас есть специальная функция , присутствующая в библиотеке numpy. Эта функция поможет нам достичь нашей цели, создав идентификационную матрицу всего в двух строках. Эта функция называется numpy.ones().
Теперь я думаю, что вы, возможно, знаете важность функции numpy.ones (). Давайте посмотрим, как мы можем использовать и внедрять его в наши проекты
1.4.1.5. Indexing and slicing¶
The items of an array can be accessed and assigned to the same way as
other Python sequences (e.g. lists):
>>> a = np.arange(10) >>> a array() >>> a], a2], a-1 (0, 2, 9)
Warning
Indices begin at 0, like other Python sequences (and C/C++).
In contrast, in Fortran or Matlab, indices begin at 1.
The usual python idiom for reversing a sequence is supported:
>>> a)
For multidimensional arrays, indices are tuples of integers:
>>> a = np.diag(np.arange(3)) >>> a array(, , ]) >>> a1, 1 1 >>> a2, 1 = 10 # third line, second column >>> a array(, , ]) >>> a1 array()
Note
- In 2D, the first dimension corresponds to rows, the second
to columns. - for multidimensional , is interpreted by
taking all elements in the unspecified dimensions.
Slicing: Arrays, like other Python sequences can also be sliced:
>>> a = np.arange(10) >>> a array() >>> a293 # array()
Note that the last index is not included! :
>>> a)
All three slice components are not required: by default, start is 0,
end is the last and step is 1:
>>> a13 array() >>> a) >>> a3:] array()
A small illustrated summary of NumPy indexing and slicing…
You can also combine assignment and slicing:
>>> a = np.arange(10) >>> a5:] = 10 >>> a array() >>> b = np.arange(5) >>> a5:] = b)
Exercise: Indexing and slicing
-
Try the different flavours of slicing, using , and
: starting from a linspace, try to obtain odd numbers
counting backwards, and even numbers counting forwards. -
Reproduce the slices in the diagram above. You may
use the following expression to create the array:>>> np.arange(6) + np.arange(, 51, 10), , , , , ])
Exercise: Array creation
Create the following arrays (with correct data types):
, 1, 1, 1, 1], 1, 1, 1, 2], 1, 6, 1, 1]] , 2., , , , ], , 3., , , ], , , 4., , ], , , , 5., ], , , , , 6.]]
Par on course: 3 statements for each
Hint: Individual array elements can be accessed similarly to a list,
e.g. or .
Hint: Examine the docstring for .
Делать математику с NumPy
Любое руководство по NumPy не будет полным без числовых и математических операций, которые вы можете выполнять с NumPy! Давайте рассмотрим их:
добавит 1 к каждому элементу в массиве идобавит массив 2 к массиву 1. То же самое относится и к- все эти команды будут работать точно так же, как описано выше.
Вы также можете заставить NumPy возвращать различные значения из массива, например:
- вернет квадратный корень каждого элемента в массиве
- вернет синус каждого элемента в массиве
- вернет натуральный логарифм каждого элемента в массиве
- вернет абсолютное значение каждого элемента в массиве
- вернетсяесли массивы имеют одинаковые элементы и форму
Можно округлить разные значения в массиве:округляется до ближайшего целого числа,будет округляться до ближайшего целого числа ибудет округлять до ближайшего целого числа.
Пример 1: Базовый кейс для изучения работы Numpy Vstack
В этом примере 1 мы просто инициализируем, объявим два массива numpy, а затем создадим их вертикальный стек с помощью функции vstack.
import numpy as np.array() print ("First Input array : \n", x) .array() print ("Second Input array : \n", y) .vstack((x,y)) print ("Vertically stacked array:\n ", res)
Выход:
Объяснение:
В приведенном выше примере мы сложили два массива numpy вертикально (по строкам). Во-первых, мы импортировали модуль numpy. После импорта мы инициализировали, объявили и сохранили два массива numpy в переменных ‘x и y’. После этого с помощью функции np.vstack() мы сложили или сложили два 1-D массива numpy
Здесь обратите внимание, что стек будет выполнен вертикально (row-wisestack). Кроме того, оба массива должны иметь одинаковую форму вдоль всех осей, кроме первой
Следовательно, вы можете видеть выход со всеми параметрами.
В этом примере мы импортируем библиотеку numpy и библиотеку pyplot. Затем мы применим функцию random.normal() со всеми параметрами и выведем выходные данные. После этого мы составим гистограмму с помощью библиотеки pyplot и распечатаем график. Давайте рассмотрим этот пример для более детального понимания концепции.
# import numpy library import numpy as np # import pyplot library from matplotlib import pyplot as plt output = np.random.normal( 0.0 , 1.0, size = 50 ) print(output) count, bins, ignored = plt.hist( output, 100) plt.show()
Выход:
Объяснение:
- Во-первых, мы будем импортировать библиотеку numpy с псевдонимом np.
- Затем мы импортируем pyplot как plt из библиотеки matplotlib.
- Затем мы применим функцию со всеми параметрами и напечатаем вывод.
- Значений массива так много, что его размер равен 50. таким образом, в качестве случайных выборок будет 50 значений.
- После этого мы распечатаем гистограмму с помощью модуля pyplot.
- По крайней мере, мы можем видеть нарисованный график.
- Следовательно, вы можете видеть оба выхода.
Способы печатать Numpy Array в Python
Как упоминалось ранее, мы также можем реализовать массивы в Python, используя Numpy модуль. Модуль поставляется с заранее определенным классом массива, который может удерживать значения одного типа.
Эти Numpy массивы также может быть многомерным. Итак, давайте посмотрим, как мы можем распечатать оба 1d а также 2D Обмойте массивы в Python.
Использование метода Print ()
Подобно корпусу массивов, реализованных с использованием списков, мы можем напрямую пропустить numpy Marray имя для Метод для печати массивов.
import numpy as np arr_2d = np.array(,,]) arr = np.array() print("Numpy array is: ", arr) #printing the 1d numpy array print("Numpy 2D-array is: ", arr_2d) #printing the 2d numpy array
Выход :
Numpy array is: Numpy 2D-array is: ]
Здесь и один 1d и один 2D Numpy массивы соответственно. Мы передаем их имена в метод и распечатать их обоих. Примечание: На этот раз также массивы напечатаны в виде примечательных массивов с кронштейнами.
Использование для циклов
Опять же, мы также можем пройти через Numpy массивы в Python, используя петля структуры. Итак, мы можем получить доступ к каждому элементу массива и печатать одинаково. Это еще один способ печатать массив в Python.
Посмотрите на пример ниже.
import numpy as np arr = np.array() arr_2d = np.array(,,,]) #printing the numpy array print("The Numpy Array is : ") for i in arr: print(i, end = ' ') #printing the numpy 2D-Array print("\nThe Numpy 2D-Array is:") for i in arr_2d: for j in i: print(j, end=" ") print()
Выход :
The Numpy Array is : 11 22 33 44 The Numpy 2D-Array is: 90 20 76 45 44 87 73 81
Вот и мы печатаем Numpy Array элементы на нашем желаемом способе (без скобок) путем доступа к элементам 1d и 2D массив индивидуально.
Функция Numpy mgrid() v/s meshgrid() в Python
Numpy mgrid() конкретизирует заданные индексы, транслируя их в виде плотных сеток. Одновременно функция meshgrid() полезна для создания массивов координат. Векторизация оценок функций по сетке. Функция Meshgrid() вдохновлена MATLAB. Кроме того, meshgrid() создает прямоугольную сетку из двух заданных одномерных массивов, представляющих декартовы индексы.
Пример функции Numpy meshgrid ():
import numpy as np .linspace(-4, 4, 9) # numpy.linspace creates an array of 9 linearly placed elements between -4 and 4, both inclusive .linspace(-5, 5, 11) x_1,.meshgrid(x, y) y_1 = ") print(y_1)
Выход:
x_1 = ] y_1 = ]
Creating RGBA images
An RGBA image has 4 channels (unlike an RGB image that has only 3). The fourth channel is an alpha channel. An alpha value of 255 will make the pixel fully opaque, value 0 will make it fully transparent, values in between will make
the pixel partly transparent.
In the code below we create an RGBA image, initially setting the same blue and orange areas as before, with and alpha value of 255. We then loop over the image changing the alpha value of each pixel to be equal to its x coordinate. This means that the pixels on the left side of the image will be transparent, and the pixels at the right will be almost fully opaque. The transparency varies smoothly from left to right.:
import numpy as np from PIL import Image array = np.zeros(, dtype=np.uint8) array = , , 255, 255 #Blue right side # Set transparency depending on x position for x in range(200): for y in range(100): arrayy, x, 3 = x img = Image.fromarray(array) img.save('testrgba.png')
And here is the image:
Агрегирование в NumPy
Дополнительным преимуществом NumPy является наличие в нем функций агрегирования:
Функциями , и дело не ограничивается.
К примеру:
- позволяет получить среднее арифметическое;
- выдает результат умножения всех элементов;
- нужно для среднеквадратического отклонения.
Это лишь небольшая часть довольно обширного списка функций агрегирования в NumPy.
Использование нескольких размерностей NumPy
Все перечисленные выше примеры касаются векторов одной размерности. Главным преимуществом NumPy является его способность использовать отмеченные операции с любым количеством размерностей.
Метод Numpy zeros() в Python
Метод Numpy в Python создает новый массив указанной формы и типа со всеми его элементами, инициализированными в . Функция возвращает один и тот же массив, где бы он ни был вызван.
Основной синтаксис метода может быть задан,
import numpy as np arr = np.zeros( shape , dtype , order )
Здесь,
- arr хранит результирующий массив, возвращаемый методом ,
- – это целое число последовательности, которое определяет размер, а также форму массива. Если форма представлена в виде целого числа, сгенерированный массив будет представлять собой массив 1D. В то время как, если мы дадим целочисленный кортеж с различными целочисленными значениями, мы получим многомерный массив,
- или тип данных указывает тип данных элементов массива. По умолчанию он имеет значение float.
- определяет, будет ли массив храниться в соответствии с шаблоном/порядком строк(C) или столбцов(F) в ячейке памяти.
Арифметические операции над массивами NumPy
Создадим два массива NumPy и продемонстрируем выгоду их использования.
Массивы будут называться и :
При сложении массивов складываются значения каждого ряда. Это сделать очень просто, достаточно написать :
Новичкам может прийтись по душе тот факт, что использование абстракций подобного рода не требует написания циклов for с вычислениями. Это отличная абстракция, которая позволяет оценить поставленную задачу на более высоком уровне.
Помимо сложения, здесь также можно выполнить следующие простые арифметические операции:
Довольно часто требуется выполнить какую-то арифметическую операцию между массивом и простым числом. Ее также можно назвать операцией между вектором и скалярной величиной. К примеру, предположим, в массиве указано расстояние в милях, и его нужно перевести в километры. Для этого нужно выполнить операцию :
Как можно увидеть в примере выше, NumPy сам понял, что умножить на указанное число нужно каждый элемент массива. Данный концепт называется трансляцией, или broadcating. Трансляция бывает весьма полезна.
Синтаксис
Формат:
array = numpy.arange(start, stop, step, dtype=None)
Где:
- start -> Начальная точка (включенная) диапазона, которая по умолчанию установлена на 0;
- stop -> Конечная точка (исключенная) диапазона;
- step -> Размер шага последовательности, который по умолчанию равен 1. Это может быть любое действительное число, кроме нуля;
- dtype -> Тип выходного массива. Если dtype не указан (или указан, как None), тип данных будет выведен из типа других входных аргументов.
Давайте рассмотрим простой пример, чтобы понять это:
import numpy as np a = np.arange(0.02, 2, 0.1, None) print('Linear Sequence from 0.02 to 2:', a) print('Length:', len(a))
Это сгенерирует линейную последовательность от 0,2 (включительно) до 2 (исключено) с размером шага 0,1, поэтому в последовательности будет (2 — 0,2) / 0,1 — 1 = 20 элементов, что является длиной результирующего массив numpy.
Вывод:
Linear Sequence from 0.02 to 2: Length: 20
Вот еще одна строка кода, которая генерирует числа от 0 до 9 с помощью arange(), используя размер шага по умолчанию 1:
>>> np.arange(0, 10) array()
Если размер шага равен 0, это недопустимая последовательность, поскольку шаг 0 означает, что вы делите диапазон на 0, что вызовет исключение ZeroDivisionError Exception.
import numpy as np # Invalid Step Size! a = np.arange(0, 10, 0)
Вывод:
ZeroDivisionError: division by zero
ПРИМЕЧАНИЕ. Эта функция немного отличается от numpy.linspace(), которая по умолчанию включает как начальную, так и конечную точки для вычисления последовательности. Он также не принимает в качестве аргумента размер шага, а принимает только количество элементов в последовательности.
Что мы подразумеваем под универсальными функциями NumPy?
Универсальные функции NumPy на самом деле являются математическими функциями. Математические функции NumPy в NumPy сформулированы как универсальные функции. Эти универсальные (математические функции NumPy) работают с массивом NumPy и выполняют поэлементные операции со значениями данных.
Универсальные функции NumPy принадлежат классу numpy.ufunc в Python. Некоторые из основных математических операций вызываются внутренне, когда мы вызываем определенные операторы. Например, когда мы кадрируем x + y, он внутренне вызывает универсальную функцию numpy.add ().
Мы даже можем создавать свои собственные универсальные функции, используя метод frompyfunc ().
Синтаксис:
numpy.frompyfunc(function-name, input, output)
- function-name : имя функции, которая будет оформлена как универсальная функция
- input : Количество входных массивов
- output : Количество выходных массивов
Пример:
В этом примере мы преобразовали функцию product в универсальную функцию с помощью метода frompyfunc () .
Таким образом, теперь метод product() ведет себя как универсальная математическая функция и выполняет поэлементное умножение, когда массивы передаются ему в качестве параметров.
import numpy as np def product(a, b): return a*b product = np.frompyfunc(product, 2, 1) res = product(, ) print(res)
Выход:
Creating RGB Images
Here is a 5 by 4 pixel RGB image:
The image contains 4 lines of pixels. Each line of pixels contains 5 pixels. Each pixel contains 3 bytes (representing the red, green and blue values of the pixel colour):
RGB images are usually stored as 3 dimensional arrays of 8-bit unsigned integers. The shape of the array is:
height x width x 3.
Here is how we create an array to represent a 5 pixel wide by 4 pixel high image:
import numpy as np width = 5 height = 4 array = np.zeros(, dtype=np.uint8)
Notice that the first dimension is the height, and the second dimension is the width. That is because the data is ordered by lines, then each line is ordered by pixels, and finally each pixel contains 3 byte values for RGB. Each colour is represented by an unsigned byte (numpy type uint8).
Now let’s fill the array with orange pixels (red=255, green=128, blue=0). We use slices to do this, the three values are broadcast across all the rows and columns of the array:
array = 255, 128,
Синтаксис
Эта функция принимает массив типа numpy (например, массив целых и логических значений NumPy).
Он возвращает новый массив numpy после фильтрации на основе условия, который представляет собой массив логических значений, подобный numpy.
Например, условие может принимать значение массива (]), который является логическим массивом типа numpy. (По умолчанию NumPy поддерживает только числовые значения, но мы также можем преобразовать их в bool).
Например, если условием является массив (]), а наш массив – a = ndarray (]), при применении условия к массиву (a ), мы получим массив ndarray (`1 2`).
import numpy as np a = np.arange(10) print(a) # Will only capture elements <= 2 and ignore others
Вывод:
array()
ПРИМЕЧАНИЕ. То же условие условия также может быть представлено как <= 2. Это рекомендуемый формат для массива условий, так как записывать его как логический массив очень утомительно.
Но что, если мы хотим сохранить размерность результата и не потерять элементы из нашего исходного массива? Для этого мы можем использовать numpy.where().
numpy.where(condition )
У нас есть еще два параметра x и y. Что это? По сути, это означает, что если условие выполняется для некоторого элемента в нашем массиве, новый массив будет выбирать элементы из x.
В противном случае, если это false, будут взяты элементы из y.
При этом наш окончательный выходной массив будет массивом с элементами из x, если условие = True, и элементами из y, если условие = False.
Обратите внимание, что хотя x и y необязательны, если вы указываете x, вы также ДОЛЖНЫ указать y. Это потому, что в этом случае форма выходного массива должна быть такой же, как и входной массив
ПРИМЕЧАНИЕ. Та же логика применима как для одномерных, так и для многомерных массивов. В обоих случаях мы выполняем фильтрацию по условию. Также помните, что формы x, y и условия передаются вместе.
Теперь давайте рассмотрим несколько примеров, чтобы правильно понять эту функцию.
Различные методы нормализации массива NumPy
1. Нормализация с помощью NumPy Sum
В этом методе мы используем NumPy ndarray sum для вычисления суммы каждой отдельной строки массива. После чего мы делим элементы массива if на сумму. Давайте рассмотрим это на примере.
import numpy as ppool.array(, ) print(a)) print(b)/b print(c)
Выход:
Это еще один способ нормализации массива. Этот метод действительно эффективен для нормализации по строкам.
2. Нормализация с помощью sklearn
Sklearn-это модуль python, широко используемый в науке о данных и интеллектуальном анализе. Используя это href=”https://en.wikipedia.org/wiki/Method”>метод также мы можем нормализовать массив. Это следует очень простой процедуре, и давайте разберемся в ней на примере. href=”https://en.wikipedia.org/wiki/Method”>метод также мы можем нормализовать массив. Это следует очень простой процедуре, и давайте разберемся в ней на примере.
from sklearn import preprocessing print(preprocessing.normalize(, ]))
Выход:
3. Нормализация с помощью понимания списка
Вы также можете нормализовать список в python. Понимание списка, как правило, предлагает более короткий синтаксис, который помогает в создании нового списка из существующего списка. Давайте рассмотрим это на примере.
list = ] norm_list = [i / sum(j) for j in list for i in j] print(norm_list)
Посмотрите, как нам удалось нормализовать наш существующий список. Здесь мы видим, что мы разделили каждый элемент в списке на сумму всех элементов. Это тоже хороший вариант для нормализации.
4. Нормализация с использованием цикла For
Мы также продвигаем процесс нормализации с помощью цикла for. Используя цикл for, мы можем вычислить сумму всех элементов. Затем разделите каждый элемент на эту сумму. Здесь я советую вам использовать массив NumPy. Продолжая деление, вы можете получить ошибку, так как “list/int” не является подходящим типом данных.
import numpy as ppool def _sum(arr): for i in arr: + i return(sum) .array( ) (arr) (arr) print (ans) /ans print(b)
Выход: