Python numpy zeros like

Предисловие переводчика

Продолжаем перевод статьи о numpy в python. Для тех кто не читал первую часть, сюда: Часть 1. А всем остальным — приятного чтения.

Другие пути создания массивов

Функция arange аналогична функции range, но возвращает массив:

>>> np.arange(5, dtype=float) array([ 0., 1., 2., 3., 4.]) >>> np.arange(1, 6, 2, dtype=int) array([1, 3, 5])

Функции zeros и ones создают новые массивы с установленной размерностью, заполненные этими значениями. Это, наверное, самые простые в использовании функции для создания массивов:

>>> np.ones((2,3), dtype=float) array([[ 1., 1., 1.], [ 1., 1., 1.]]) >>> np.zeros(7, dtype=int) array([0, 0, 0, 0, 0, 0, 0])

Функции zeros_like и ones_like могут преобразовать уже созданный массив, заполнив его нулями и единицами соответственно:

>>> a = np.array([[1, 2, 3], [4, 5, 6]], float) >>> np.zeros_like(a) array([[ 0., 0., 0.], [ 0., 0., 0.]]) >>> np.ones_like(a) array([[ 1., 1., 1.], [ 1., 1., 1.]])

Также есть некоторое количество функций для создания специальных матриц. Для создания квадратной матрицы с главной диагональю, которая заполненная единицами, воспользуемся методом identity:

>>> np.identity(4, dtype=float) array([[ 1., 0., 0., 0.], [ 0., 1., 0., 0.], [ 0., 0., 1., 0.], [ 0., 0., 0., 1.]])

Функция eye возвращает матрицу с единичками на к-атой диагонали:

>>> np.eye(4, k=1, dtype=float) array([[ 0., 1., 0., 0.], [ 0., 0., 1., 0.], [ 0., 0., 0., 1.], [ 0., 0., 0., 0.]])

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

Когда для массивов мы используем стандартные математические операции, должен соблюдаться принцип: элемент—элемент. Это означает, что массивы должны быть одинакового размера во время сложения, вычитания и тому подобных операций:

>>> a = np.array([1,2,3], float) >>> b = np.array([5,2,6], float) >>> a + b array([6., 4., 9.]) >>> a – b array([-4., 0., -3.]) >>> a * b array([5., 4., 18.]) >>> b / a array([5., 1., 2.]) >>> a % b array([1., 0., 3.]) >>> b**a array([5., 4., 216.])

Для двухмерных массивов, умножение остается поэлементным и не соответствует умножению матриц. Для этого существуют специальные функции, которые мы изучим позже.

>>> a = np.array([[1,2], [3,4]], float) >>> b = np.array([[2,0], [1,3]], float) >>> a * b array([[2., 0.], [3., 12.]])

При несоответствии в размере выбрасываются ошибки:

>>> a = np.array([1,2,3], float) >>> b = np.array([4,5], float) >>> a + b Traceback (most recent call last): File "", line 1, in ValueError: operands could not be broadcast together with shapes (3,) (2,)

Однако, если размерность массивов не совпадает, они будут преобразованы для выполнения математических операций. Это зачастую означает, что меньший массив будет использован несколько раз для завершения операций. Рассмотрим такой пример:

>>> a = np.array([[1, 2], [3, 4], [5, 6]], float) >>> b = np.array([-1, 3], float) >>> a array([[ 1., 2.], [ 3., 4.], [ 5., 6.]]) >>> b array([-1., 3.]) >>> a + b array([[ 0., 5.], [ 2., 7.], [ 4., 9.]])

Тут, одномерный массив b был преобразован в двухмерный, который соответствует размеру массива a. По существу, b был повторен несколько раз, для каждой «строки» a. Иначе его можно представить так:

Python автоматически преобразовывает массивы в этом случае. Иногда, однако, когда преобразование играет роль, мы можем использовать константу newaxis, чтобы изменить преобразование:

>>> a = np.zeros((2,2), float) >>> b = np.array([-1., 3.], float) >>> a array([[ 0., 0.], [0., 0.]]) >>> b array([-1., 3.]) >>> a + b array([[-1., 3.], [-1., 3.]]) >>> a + b[np.newaxis,:] array([[-1., 3.], [-1., 3.]]) >>> a + b[:,np.newaxis] array([[-1., -1.], [ 3., 3.]])

Вдобавок к стандартным операторам, в numpy включена библиотека стандартных математических функций, которые могут быть применены поэлементно к массивам. Собственно функции: abs, sign, sqrt, log, log10, exp, sin, cos, tan, arcsin, arccos, arctan, sinh, cosh, tanh, arcsinh, arccosh, и arctanh.

>>> a = np.array([1, 4, 9], float) >>> np.sqrt(a) array([ 1., 2., 3.])

Функции floor, ceil и rint возвращают нижние, верхние или ближайшие (округлённое) значение:

>>> a = np.array([1.1, 1.5, 1.9], float) >>> np.floor(a) array([ 1., 1., 1.]) >>> np.ceil(a) array([ 2., 2., 2.]) >>> np.rint(a) array([ 1., 2., 2.])

Также в numpy включены две важные математические константы:

>>> np.pi 3.1415926535897931 >>> np.e 2.7182818284590451

Перебор элементов массива

Проводить итерацию массивов можно аналогично спискам:

>>> a = np.array([1, 4, 5], int) >>> for x in a: . print x 1 4 5

Для многомерных массивов итерация будет проводиться по первой оси, так, что каждый проход цикла будет возвращать «строку» массива:

>>> a = np.array([[1, 2], [3, 4], [5, 6]], float) >>> for x in a: . print x [ 1. 2.] [ 3. 4.] [ 5. 6.]

Множественное присваивание также доступно при итерации:

>>> a = np.array([[1, 2], [3, 4], [5, 6]], float) >>> for (x, y) in a: . print x * y 2.0 12.0 30.0

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

Для получения каких-либо свойств массивов существует много функций. Элементы могут быть суммированы или перемножены:

>>> a = np.array([2, 4, 3], float) >>> a.sum() 9.0 >>> a.prod() 24.0

В этом примере были использованы функции массива. Также можно использовать собственные функции numpy:

Для большинства случаев могут использоваться оба варианта.
Некие функции дают возможность оперировать статистическими данными. Это функции mean (среднее арифметическое), вариация и девиация:

>>> a = np.array([2, 1, 9], float) >>> a.mean() 4.0 >>> a.var() 12.666666666666666 >>> a.std() 3.5590260840104371

Можно найти минимум и максимум в массиве:

>>> a = np.array([2, 1, 9], float) >>> a.min() 1.0 >>> a.max() 9.0

Функции argmin и argmax возвращают индекс минимального или максимального элемента:

>>> a = np.array([2, 1, 9], float) >>> a.argmin() 1 >>> a.argmax() 2

Для многомерных массивов каждая из функций может принять дополнительный аргумент axis и в зависимости от его значения выполнять функции по определенной оси, помещая результаты исполнения в массив:

>>> a = np.array([[0, 2], [3, -1], [3, 5]], float) >>> a.mean(axis=0) array([ 2., 2.]) >>> a.mean(axis=1) array([ 1., 1., 4.]) >>> a.min(axis=1) array([ 0., -1., 3.]) >>> a.max(axis=0) array([ 3., 5.])

Как и списки, массивы можно отсортировать:

>>> a = np.array([6, 2, 5, -1, 0], float) >>> sorted(a) [-1.0, 0.0, 2.0, 5.0, 6.0] >>> a.sort() >>> a array([-1., 0., 2., 5., 6.])

Значения в массиве могут быть «сокращены», чтобы принадлежать заданному диапазону. Это тоже самое что применять min(max(x, minval), maxval) к каждому элементу x:

>>> a = np.array([6, 2, 5, -1, 0], float) >>> a.clip(0, 5) array([ 5., 2., 5., 0., 0.])

Уникальные элементы могут быть извлечены вот так:

>>> a = np.array([1, 1, 4, 5, 5, 5, 7], float) >>> np.unique(a) array([ 1., 4., 5., 7.])

Для двухмерных массивов диагональ можно получить так:

>>> a = np.array([[1, 2], [3, 4]], float) >>> a.diagonal() array([ 1., 4.])

Вот и вторая статья подошла к концу. Спасибо за уделенное внимание и удачи в ваших начинаниях! До скорой встречи.

Источник

numpy.zeros_like#

Return an array of zeros with the same shape and type as a given array.

Parameters : a array_like

The shape and data-type of a define these same attributes of the returned array.

dtype data-type, optional

Overrides the data type of the result.

Overrides the memory layout of the result. ‘C’ means C-order, ‘F’ means F-order, ‘A’ means ‘F’ if a is Fortran contiguous, ‘C’ otherwise. ‘K’ means match the layout of a as closely as possible.

If True, then the newly created array will use the sub-class type of a, otherwise it will be a base-class array. Defaults to True.

shape int or sequence of ints, optional.

Overrides the shape of the result. If order=’K’ and the number of dimensions is unchanged, will try to keep order, otherwise, order=’C’ is implied.

Array of zeros with the same shape and type as a.

Return an empty array with shape and type of input.

Return an array of ones with shape and type of input.

Return a new array with shape of input filled with value.

Return a new array setting values to zero.

>>> x = np.arange(6) >>> x = x.reshape((2, 3)) >>> x array([[0, 1, 2], [3, 4, 5]]) >>> np.zeros_like(x) array([[0, 0, 0], [0, 0, 0]]) 
>>> y = np.arange(3, dtype=float) >>> y array([0., 1., 2.]) >>> np.zeros_like(y) array([0., 0., 0.]) 

Источник

numpy.zeros_like#

Return an array of zeros with the same shape and type as a given array.

Parameters : a array_like

The shape and data-type of a define these same attributes of the returned array.

dtype data-type, optional

Overrides the data type of the result.

Overrides the memory layout of the result. ‘C’ means C-order, ‘F’ means F-order, ‘A’ means ‘F’ if a is Fortran contiguous, ‘C’ otherwise. ‘K’ means match the layout of a as closely as possible.

If True, then the newly created array will use the sub-class type of a, otherwise it will be a base-class array. Defaults to True.

shape int or sequence of ints, optional.

Overrides the shape of the result. If order=’K’ and the number of dimensions is unchanged, will try to keep order, otherwise, order=’C’ is implied.

Array of zeros with the same shape and type as a.

Return an empty array with shape and type of input.

Return an array of ones with shape and type of input.

Return a new array with shape of input filled with value.

Return a new array setting values to zero.

>>> x = np.arange(6) >>> x = x.reshape((2, 3)) >>> x array([[0, 1, 2], [3, 4, 5]]) >>> np.zeros_like(x) array([[0, 0, 0], [0, 0, 0]]) 
>>> y = np.arange(3, dtype=float) >>> y array([0., 1., 2.]) >>> np.zeros_like(y) array([0., 0., 0.]) 

Источник

numpy.zeros_like#

Return an array of zeros with the same shape and type as a given array.

Parameters : a array_like

The shape and data-type of a define these same attributes of the returned array.

dtype data-type, optional

Overrides the data type of the result.

Overrides the memory layout of the result. ‘C’ means C-order, ‘F’ means F-order, ‘A’ means ‘F’ if a is Fortran contiguous, ‘C’ otherwise. ‘K’ means match the layout of a as closely as possible.

If True, then the newly created array will use the sub-class type of a, otherwise it will be a base-class array. Defaults to True.

shape int or sequence of ints, optional.

Overrides the shape of the result. If order=’K’ and the number of dimensions is unchanged, will try to keep order, otherwise, order=’C’ is implied.

Array of zeros with the same shape and type as a.

Return an empty array with shape and type of input.

Return an array of ones with shape and type of input.

Return a new array with shape of input filled with value.

Return a new array setting values to zero.

>>> x = np.arange(6) >>> x = x.reshape((2, 3)) >>> x array([[0, 1, 2], [3, 4, 5]]) >>> np.zeros_like(x) array([[0, 0, 0], [0, 0, 0]]) 
>>> y = np.arange(3, dtype=float) >>> y array([0., 1., 2.]) >>> np.zeros_like(y) array([0., 0., 0.]) 

Источник

Читайте также:  Компиляция exe в java
Оцените статью