数据分析必会,一文学会Numpy

Numpy是Python中科学计算的核心库。它提供了一个高性能的多维数组对象,以及用于处理这些数组的工具。如果你想要进入Python中的数据科学或机器学习,你就要必须学习它。接下来咱们一起学习一下它。

1. 加载Numpy库

import numpy as np

 

2. Numpy存储数据的array结构

NumPy 的数组类(array class)叫做 ndarray,同时我们也常称其为数组(array)。注意 numpy.array 和标准 Python 库中的类 array.array 是不同的。标准 Python 库中的类 array.array 只处理一维的数组,提供少量的功能。ndarray 还具有如下很多重要的属性:

  • ndarray.ndim:显示数组的轴线数量(或维度)。

  • ndarray.shape:显示在每个维度里数组的大小。如 n 行 m 列的矩阵,它的 shape 就是(n, m)。

数据分析必会,一文学会Numpy_第1张图片

一起尝试创建6个不同维度的array,如下:

a = np.array([1, 2, 3])
b = np.array([(1.5, 2, 3), (4, 5, 6)], dtype = float)
c = np.array([[(1.5, 2, 3), (4, 5, 6)], [(3, 2, 1), (4, 5, 6)]], dtype = float)
d = np.arange(10,25,5)
e = np.full((2, 2), 7)
f = np.eye(2)

print("a: \n", a)
print("\nb: \n", b)
print("\nc: \n", c)
print("\nd: \n", d)
print("\ne: \n", e)
print("\nf: \n", f)

"""
结果:

a: 
 [1 2 3]

b: 
 [[1.5 2.  3. ]
 [4.  5.  6. ]]

c: 
 [[[1.5 2.  3. ]
  [4.  5.  6. ]]

 [[3.  2.  1. ]
  [4.  5.  6. ]]]

d: 
 [10 15 20]

e: 
 [[7 7]
 [7 7]]

f: 
 [[1. 0.]
 [0. 1.]]
"""

 

3. 查看一下a, b, c的属性

print("a的维度: ", a.shape)
print("\na的长度: ", len(a))
print("\nb的维度数量: ", b.ndim)
print("\nb的元素数量: ", b.size)
print("\nb的元素类型: ", b.dtype)
print("\nc的元素类型名称: ", c.dtype.name)
print("\n转换c的元素类型为int型: \n", c.astype(int))

"""
结果:

a的维度:  (3,)

a的长度:  3

b的维度数量:  2

b的元素数量:  6

b的元素类型:  float64

c的元素类型名称:  float64

转换c的元素类型为int型: 
 [[[1 2 3]
  [4 5 6]]

 [[3 2 1]
  [4 5 6]]]
"""

 

4. Numpy提供了许多创建数组的函数

print("\n创建3x4的0矩阵: \n", np.zeros((3,4)))
print("\n创建2x3x4的1矩阵: \n", np.ones((2,3,4), dtype=np.int16))
print("\n创建以10开始,以25结束,两个数间隔为5的数组: \n", np.arange(10,23,5)) #Create an array of evenly, spaced values (step value)
print("\n创建以0开始,以2结束,间隔数为(2-0)/(9-1)长度为9的数组: \n", np.linspace(0,2,9)) #Create an array of evenly, spaced values (number of samples)
print("\n创建2x2的7矩阵: \n", np.full((2,2),7))
print("\n创建2x2的单位矩阵: \n", np.eye(2))
print("\n创建2x2的随机数矩阵: \n", np.random.random((2,2)))
print("\n创建3x2的空矩阵: \n", np.empty((3,2)))

"""
结果:

创建3x4的0矩阵: 
 [[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

创建2x3x4的1矩阵: 
 [[[1 1 1 1]
  [1 1 1 1]
  [1 1 1 1]]

 [[1 1 1 1]
  [1 1 1 1]
  [1 1 1 1]]]

创建以10开始,以25结束,两个数间隔为5的数组: 
 [10 15 20]

创建以0开始,以2结束,间隔数为(2-0)/(9-1)长度为9的数组: 
 [0.   0.25 0.5  0.75 1.   1.25 1.5  1.75 2.  ]

创建2x2的7矩阵: 
 [[7 7]
 [7 7]]

创建2x2的单位矩阵: 
 [[1. 0.]
 [0. 1.]]

创建2x2的随机数矩阵: 
 [[0.0681172  0.75448098]
 [0.92933939 0.70908987]]

创建3x2的空矩阵: 
 [[1.39069238e-309 1.39069238e-309]
 [1.39069238e-309 1.39069238e-309]
 [1.39069238e-309 1.39069238e-309]]
"""

 

5. Numpy的基础运算

# 基础运算
# (1)加法
add_result1 = b + a
add_result2 =np.add(b,a)
print("\n加法1的结果: \n", add_result1)
print("\n加法2的结果: \n", add_result2)

# (2)减法
subtract_result1 = a - b
subtract_result2 = np.subtract(a,b)
print("\n减法1的结果: \n", subtract_result1)
print("\n减法2的结果: \n", subtract_result2)

# (3)乘法
multiply_result1 = a * b
multiply_result2 = np.multiply(a,b)
print("\n乘法1的结果: \n", multiply_result1)
print("\n乘法2的结果: \n", multiply_result2)

# (4)除法
divide_result1 = a / b
divide_result2 = np.divide(a,b)
print("\n除法1的结果: \n", divide_result1)
print("\n除法2的结果: \n", divide_result2)

# (5) 指数函数
print("\n矩阵b的指数结果: \n", np.exp(b))

# (6)平方根函数
print("\n矩阵b的平方根结果: \n", np.sqrt(b))

# (7)正弦函数
print("\n数组a的正弦结果: \n", np.sin(a))

# (8)余弦函数
print("\n矩阵b的余弦结果: \n", np.cos(b))

# (9)对数函数
print("\n数组a的对数结果: \n", np.log(a))

# (10)矩阵乘法
print("\n矩阵e与矩阵f的矩阵乘法结果: \n", e.dot(f))


"""
结果:

加法1的结果: 
 [[2.5 4.  6. ]
 [5.  7.  9. ]]

加法2的结果: 
 [[2.5 4.  6. ]
 [5.  7.  9. ]]

减法1的结果: 
 [[-0.5  0.   0. ]
 [-3.  -3.  -3. ]]

减法2的结果: 
 [[-0.5  0.   0. ]
 [-3.  -3.  -3. ]]

乘法1的结果: 
 [[ 1.5  4.   9. ]
 [ 4.  10.  18. ]]

乘法2的结果: 
 [[ 1.5  4.   9. ]
 [ 4.  10.  18. ]]

除法1的结果: 
 [[0.66666667 1.         1.        ]
 [0.25       0.4        0.5       ]]

除法2的结果: 
 [[0.66666667 1.         1.        ]
 [0.25       0.4        0.5       ]]

矩阵b的指数结果: 
 [[  4.48168907   7.3890561   20.08553692]
 [ 54.59815003 148.4131591  403.42879349]]

矩阵b的平方根结果: 
 [[1.22474487 1.41421356 1.73205081]
 [2.         2.23606798 2.44948974]]

数组a的正弦结果: 
 [0.84147098 0.90929743 0.14112001]

矩阵b的余弦结果: 
 [[ 0.0707372  -0.41614684 -0.9899925 ]
 [-0.65364362  0.28366219  0.96017029]]

数组a的对数结果: 
 [0.         0.69314718 1.09861229]

矩阵e与矩阵f的矩阵乘法结果: 
 [[7. 7.]
 [7. 7.]]
"""

 

6. 接下来看看Numpy的聚合函数

Numpy有很多有用的统计函数,用于从数组中给定的元素中查询最大、最小、标准差等。

print("\n数组a的和: \n", np.sum(a))
print("\n数组a的最小值: \n", np.min(a))
print("\n矩阵b在axis=0维度上的最大值: \n", np.max(b, axis=0))
print("\n矩阵b在axis=0维度上的累加值: \n", np.cumsum(b, axis=0))
print("\n数组a的平均值: \n", np.mean(a))
print("\n矩阵b的全局中位数: \n", np.median(b))
print("\n数组a自身的皮尔逊积矩相关系数: \n", np.corrcoef(a))
print("\n矩阵b的全局标准差: \n", np.std(b))
print("\n矩阵b在axis=1维度上的标准差: \n", np.std(b, axis=1))

"""
结果:

数组a的和: 
 6

数组a的最小值: 
 1

矩阵b在axis=0维度上的最大值: 
 [4. 5. 6.]

矩阵b在axis=0维度上的累加值: 
 [[1.5 2.  3. ]
 [5.5 7.  9. ]]

数组a的平均值: 
 2.0

矩阵b的全局中位数: 
 3.5

数组a自身的皮尔逊积矩相关系数: 
 1.0

矩阵b的全局标准差: 
 1.5920810978785667

矩阵b在axis=1维度上的标准差: 
 [0.62360956 0.81649658]
"""

7. 数组索引,Numpy提供了几种索引数组的方法

(1)整数组索引

print("数组a的第3个元素: ", a[2])
print("矩阵b的第2行第3列的元素: ", b[1, 2])

"""
结果:

数组a的第3个元素:  3
矩阵b的第2行第3列的元素:  6.0
"""

表现在图中,即为:

数据分析必会,一文学会Numpy_第2张图片数据分析必会,一文学会Numpy_第3张图片

 

(2)切片(Slicing):与Python列表类似,可以对numpy数组进行切片。由于数组可能是多维的,因此必须为数组的每个维指定一个切片:

print("\n数组a的前2个元素: \n", a[0:2])
print("\n矩阵b的前2行的第2列的元素: \n", b[0:2, 1])
print("\n矩阵b的第一行的元素: \n", b[:1])
print("\n矩阵c的第0维的第2列的元素: \n", c[1,...])
print("\n数组a反转: \n", a[::-1])

"""
结果:

数组a的前2个元素: 
 [1 2]

矩阵b的前2行的第2列的元素: 
 [2. 5.]

矩阵b的第一行的元素: 
 [[1.5 2.  3. ]]

矩阵c的第0维的第2列的元素: 
 [[3. 2. 1.]
 [4. 5. 6.]]

数组a反转: 
 [3 2 1]
"""

(3)布尔型索引

print("数组a的小于2的元素: ", a[a<2])
print("矩阵b的大于4的元素: ", b[b>4])

"""
结果:

数组a的小于2的元素:  [1]
矩阵b的大于4的元素:  [5. 6.]
"""

(4)Fancy索引

数据分析必会,一文学会Numpy_第4张图片

 

8. Array常用操作

数据分析必会,一文学会Numpy_第5张图片

数据分析必会,一文学会Numpy_第6张图片

Numpy中数组的连接函数主要有如下3个:

concatenate: 沿着现存的轴连接数据
vstack: 竖直堆叠数据(行方向)
hstack: 水平堆叠数据(列方向)

数据分析必会,一文学会Numpy_第7张图片

数据分析必会,一文学会Numpy_第8张图片

9. 线性代数API

如下仅展示了简单的矩阵运算更多详细的方法可在实践中遇到在查找 API。如下展示了矩阵的转置、求逆、单位矩阵、矩阵乘法、矩阵的迹、解线性方程和求特征向量等基本运算。

import numpy as np

a = np.array([[1.0, 2.0], [3.0, 4.0]])
print(a)
"""
[[ 1.  2.]
 [ 3.  4.]]
"""

a.transpose()
"""
array([[ 1.,  3.],
       [ 2.,  4.]])
"""

np.linalg.inv(a)
"""
array([[-2. ,  1. ],
       [ 1.5, -0.5]])
"""

u = np.eye(2) # unit 2x2 matrix; "eye" represents "I"
print(u)
"""
array([[ 1.,  0.],
       [ 0.,  1.]])
"""

j = np.array([[0.0, -1.0], [1.0, 0.0]])
print(np.dot (j, j)) # matrix product
"""
array([[-1.,  0.],
       [ 0., -1.]])
"""

print(np.trace(u))  # trace
# 2.0

y = np.array([[5.], [7.]])
print(np.linalg.solve(a, y))
"""
array([[-3.],
       [ 4.]])
"""

print(np.linalg.eig(j))
"""
(array([ 0.+1.j,  0.-1.j]), 
 array([[0.70710678+0.j, 0.70710678-0.j],
       [0.00000000-0.70710678j,  0.00000000+0.70710678j]]))
"""

 

你可能感兴趣的:(numpy)