Numpy 基础入门

NumPy是Python中的一个运算速度非常快的一个数学库,它非常重视数组。它允许你在Python中进行向量和矩阵计算,并且由于许多底层函数实际上是用C编写的,因此你可以体验在原生Python中永远无法体验到的速度。

import numpy as np

数组基础

numpy数组是一个值网格,所有类型都相同,并由非负整数元组索引。 维数是数组的排名; 数组的形状是一个整数元组,给出了每个维度的数组大小。

NumPy围绕这些称为数组的事物展开。实际上它被称之为 ndarrays

创建数组

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

np.array([0, 1, 2, 3, 4], dtype=np.int64)
array([0, 1, 2, 3, 4])
np.arange(5)
array([0, 1, 2, 3, 4])
np.linspace(0, 10, 11)
array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])

创建特殊数组

np.zeros((2,2))
array([[0., 0.],
       [0., 0.]])
np.ones((2,2))
array([[1., 1.],
       [1., 1.]])
np.full((2,2), 3)
array([[3, 3],
       [3, 3]])
np.eye(2)
array([[1., 0.],
       [0., 1.]])
np.random.random((2,2))
array([[7.98653826e-01, 6.45391375e-01],
       [5.07987569e-04, 1.20063144e-01]])

多维数组切片

a = np.array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25],
[26, 27, 28 ,29, 30],
[31, 32, 33, 34, 35]])
a[2,4]
25
a[0, 1:4]
array([12, 13, 14])
a[1:4, 0]
array([16, 21, 26])
a[::2,::2]
array([[11, 13, 15],
       [21, 23, 25],
       [31, 33, 35]])
a[:, 1]
array([12, 17, 22, 27, 32])
a[1]
array([16, 17, 18, 19, 20])

数组属性

a.dtype # 元素类型
dtype('int64')
a.size # 元素个数
25
a.shape # 行数和列数
(5, 5)
a.itemsize # 每个项占用的字节数
8
a.ndim # 数组的维数
2
a.nbytes # 数组中的所有数据消耗掉的字节数
200

数组操作

基本操作符

a = np.arange(25)
a = a.reshape((5, 5))
a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])
b = np.array([10, 62, 1, 14, 2, 56, 79, 2, 1, 45,
4, 92, 5, 55, 63, 43, 35, 6, 53, 24,
56, 3, 56, 44, 78])
b = b.reshape((5,5))
b
array([[10, 62,  1, 14,  2],
       [56, 79,  2,  1, 45],
       [ 4, 92,  5, 55, 63],
       [43, 35,  6, 53, 24],
       [56,  3, 56, 44, 78]])
a + b
array([[ 10,  63,   3,  17,   6],
       [ 61,  85,   9,   9,  54],
       [ 14, 103,  17,  68,  77],
       [ 58,  51,  23,  71,  43],
       [ 76,  24,  78,  67, 102]])
a - b
array([[-10, -61,   1, -11,   2],
       [-51, -73,   5,   7, -36],
       [  6, -81,   7, -42, -49],
       [-28, -19,  11, -35,  -5],
       [-36,  18, -34, -21, -54]])
a * b
array([[   0,   62,    2,   42,    8],
       [ 280,  474,   14,    8,  405],
       [  40, 1012,   60,  715,  882],
       [ 645,  560,  102,  954,  456],
       [1120,   63, 1232, 1012, 1872]])
a / b
array([[0.        , 0.01612903, 2.        , 0.21428571, 2.        ],
       [0.08928571, 0.07594937, 3.5       , 8.        , 0.2       ],
       [2.5       , 0.11956522, 2.4       , 0.23636364, 0.22222222],
       [0.34883721, 0.45714286, 2.83333333, 0.33962264, 0.79166667],
       [0.35714286, 7.        , 0.39285714, 0.52272727, 0.30769231]])
a ** 2
array([[  0,   1,   4,   9,  16],
       [ 25,  36,  49,  64,  81],
       [100, 121, 144, 169, 196],
       [225, 256, 289, 324, 361],
       [400, 441, 484, 529, 576]])
a < b
array([[ True,  True, False,  True, False],
       [ True,  True, False, False,  True],
       [False,  True, False,  True,  True],
       [ True,  True, False,  True,  True],
       [ True, False,  True,  True,  True]])
a > b
array([[False, False,  True, False,  True],
       [False, False,  True,  True, False],
       [ True, False,  True, False, False],
       [False, False,  True, False, False],
       [False,  True, False, False, False]])

数组特殊运算符

a = np.arange(10)
a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a.sum()
45
a.min()
0
a.max()
9
a.cumsum()
array([ 0,  1,  3,  6, 10, 15, 21, 28, 36, 45])

索引

缺省索引

a = np.arange(0, 100, 10)
a
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
a[a >= 50]
array([50, 60, 70, 80, 90])
a[[1,5,-1]]
array([10, 50, 90])

Where 函数

np.where(a <= 50)
(array([0, 1, 2, 3, 4, 5]),)
np.where(a <= 50)[0]
array([0, 1, 2, 3, 4, 5])
a[np.where(a <= 50)[0]]
array([ 0, 10, 20, 30, 40, 50])

合并

a = np.array([1,1,1])
b = np.array([2,2,2])
np.vstack((a,b)) # 纵向合并
array([[1, 1, 1],
       [2, 2, 2]])
np.hstack((a,b)) # 横向合并
array([1, 1, 1, 2, 2, 2])

分割

a = np.arange(12).reshape((3, 4))
a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
np.split(a, 2, axis=1) # 纵向分割
[array([[0, 1],
        [4, 5],
        [8, 9]]), array([[ 2,  3],
        [ 6,  7],
        [10, 11]])]
np.split(a, 3, axis=0) # 横向分割
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
0%