Numpy

По материалам сайта http://cs231n.github.io/python-numpy-tutorial/

Numpy

Массивы
Числовой массив - это сетка значений одного и того же типа, которая индексируется набором неотрицательных целых чисел. Количество измерений - это ранг массива; форма массива является набором целых чисел , дающих размером массива по каждому измерению.
Мы можем инициализировать пустые массивы из вложенных списков Python и обращаться к элементам с помощью квадратных скобок:
import numpy as np

a = np.array([1, 2, 3])   # Create a rank 1 array
print(type(a))            # Prints "<class 'numpy.ndarray'>"
print(a.shape)            # Prints "(3,)"
print(a[0], a[1], a[2])   # Prints "1 2 3"
a[0] = 5                  # Change an element of the array
print(a)                  # Prints "[5, 2, 3]"

b = np.array([[1,2,3],[4,5,6]])    # Create a rank 2 array
print(b.shape)                     # Prints "(2, 3)"
print(b[0, 0], b[0, 1], b[1, 0])   # Prints "1 2 4"
Numpy также предоставляет множество функций для создания массивов:
import numpy as np

a = np.zeros((2,2))   # Create an array of all zeros
print(a)              # Prints "[[ 0.  0.]
                      #          [ 0.  0.]]"

b = np.ones((1,2))    # Create an array of all ones
print(b)              # Prints "[[ 1.  1.]]"

c = np.full((2,2), 7)  # Create a constant array
print(c)               # Prints "[[ 7.  7.]
                       #          [ 7.  7.]]"

d = np.eye(2)         # Create a 2x2 identity matrix
print(d)              # Prints "[[ 1.  0.]
                      #          [ 0.  1.]]"

e = np.random.random((2,2))  # Create an array filled with random values
print(e)                     # Might print "[[ 0.91940167  0.08143941]
                             #               [ 0.68744134  0.87236687]]"
О других методах создания массивов вы можете прочитать в документации .

Индексирование логического массива: индексирование логического массива позволяет выбирать произвольные элементы массива. Часто этот тип индексации используется для выбора элементов массива, которые удовлетворяют некоторому условию. Вот пример:
import numpy as np

a = np.array([[1,2], [3, 4], [5, 6]])

bool_idx = (a > 2)   # Find the elements of a that are bigger than 2;
                     # this returns a numpy array of Booleans of the same
                     # shape as a, where each slot of bool_idx tells
                     # whether that element of a is > 2.

print(bool_idx)      # Prints "[[False False]
                     #          [ True  True]
                     #          [ True  True]]"

# We use boolean array indexing to construct a rank 1 array
# consisting of the elements of a corresponding to the True values
# of bool_idx
print(a[bool_idx])  # Prints "[3 4 5 6]"

# We can do all of the above in a single concise statement:
print(a[a > 2])     # Prints "[3 4 5 6]"
Для краткости мы упустили много деталей об индексации массивов; если вы хотите узнать больше, вы должны прочитать документацию .

Array математика

Основные математические функции работают поэлементно на массивах и доступны как в виде перегрузок операторов, так и в виде функций в модуле numpy:
import numpy as np

x = np.array([[1,2],[3,4]], dtype=np.float64)
y = np.array([[5,6],[7,8]], dtype=np.float64)

# Elementwise sum; both produce the array
# [[ 6.0  8.0]
#  [10.0 12.0]]
print(x + y)
print(np.add(x, y))

# Elementwise difference; both produce the array
# [[-4.0 -4.0]
#  [-4.0 -4.0]]
print(x - y)
print(np.subtract(x, y))

# Elementwise product; both produce the array
# [[ 5.0 12.0]
#  [21.0 32.0]]
print(x * y)
print(np.multiply(x, y))

# Elementwise division; both produce the array
# [[ 0.2         0.33333333]
#  [ 0.42857143  0.5       ]]
print(x / y)
print(np.divide(x, y))

# Elementwise square root; produces the array
# [[ 1.          1.41421356]
#  [ 1.73205081  2.        ]]
print(np.sqrt(x))
Обратите внимание, что в отличие от MATLAB, *это поэлементное умножение, а не умножение матриц. Вместо этого мы используем dotфункцию для вычисления внутренних произведений векторов, умножения вектора на матрицу и умножения матриц. dotдоступно как функция в модуле numpy, так и как метод экземпляра объектов массива:
import numpy as np

x = np.array([[1,2],[3,4]])
y = np.array([[5,6],[7,8]])

v = np.array([9,10])
w = np.array([11, 12])

# Inner product of vectors; both produce 219
print(v.dot(w))
print(np.dot(v, w))

# Matrix / vector product; both produce the rank 1 array [29 67]
print(x.dot(v))
print(np.dot(x, v))

# Matrix / matrix product; both produce the rank 2 array
# [[19 22]
#  [43 50]]
print(x.dot(y))
print(np.dot(x, y))
Numpy предоставляет много полезных функций для выполнения вычислений на массивах; Одним из наиболее полезных является sum:
import numpy as np

x = np.array([[1,2],[3,4]])

print(np.sum(x))  # Compute sum of all elements; prints "10"
print(np.sum(x, axis=0))  # Compute sum of each column; prints "[4 6]"
print(np.sum(x, axis=1))  # Compute sum of each row; prints "[3 7]"
Вы можете найти полный список математических функций, предоставляемых numpy, в документации .
Помимо вычисления математических функций с использованием массивов, нам часто необходимо изменять или иным образом манипулировать данными в массивах. Простейшим примером этого типа операций является транспонирование матрицы; чтобы транспонировать матрицу, просто используйте Tатрибут объекта массива:
import numpy as np

x = np.array([[1,2], [3,4]])
print(x)    # Prints "[[1 2]
            #          [3 4]]"
print(x.T)  # Prints "[[1 3]
            #          [2 4]]"

# Note that taking the transpose of a rank 1 array does nothing:
v = np.array([1,2,3])
print(v)    # Prints "[1 2 3]"
print(v.T)  # Prints "[1 2 3]"
Numpy предоставляет гораздо больше функций для манипулирования массивами; Вы можете увидеть полный список в документации .

Комментарии

Популярные сообщения из этого блога

Создание сверточных нейронных сетей с нуля

Keras. Слои нейронной сети

Просмотреть. ConvNN