一、NumPy库

Numpy是一个封装了数组和矩阵运算的库

1、 导入

import numpy as np
  • 导入numpy,并给它起了一个小名“np”

2、 生成numpy数组

x = np.array([1.0, 2.0, 3.0])#使用列表进行初始化&赋值
y = np.array([2.0, 4.0, 6.0])
print(x + y) 
print(x * y)
print(x / y)

输出为:

  • [3. 6. 9.]
  • [ 2. 8. 18.]
  • [0.5 0.5 0.5]

注意这里的四则运算是“对应元素的”,相当于矩阵的点乘。假如两个数组的长度不相同,程序会报错。

数组也可以与数字进行线性运算

x = np.array([1.0, 2.0, 3.0])
print(2 * x)
print(x / 2)
print(2 / x)

输出为

  • [2. 4. 6.]
  • [0.5 1. 1.5]
  • [2. 1. 0.66666667]

3、NumPy的N维数组

直接使用n维列表作参数

x = np.array([[1.0, 2.0, 3.0],[3.4, 2.0, 9.0]])
print(x)
print(x.shape) # 返回x的形状
print(x.dtype) # 返回x的元素类型

输出结果为:

  • [[1. 2. 3. ]
  • [3.4 2. 9. ]]
  • (2, 3)
  • float64

N维数组的四则运算与向量运算规则相同

4、广播

前面的例子中

x = np.array([1.0, 2.0, 3.0])
print(2 * x)

这句代码为什么能运行呢? 数字本质是1×1的矩阵,数字和向量为什么能相乘呢?这里用到广播,它会自动将小数组扩充为大数组
比如

x = np.array([[1.0, 2.0, 3.0],[3.4, 2.0, 9.0]])
y = np.array([[1], [2]])
z = np.array([1,2,1])
print(x + y)
print(x + z)

y被扩充为[[1, 1, 1], [2, 2, 2]]
z被扩充为[[1, 2, 1], [1, 2, 1]]
输出结果:

  • [[ 2. 3. 4. ]
  • [ 5.4 4. 11. ]]
  • [[ 2. 4. 4. ]
  • [ 4.4 4. 10. ]]

5、元素访问

1)使用[]

print(x[0][0])
print(x[-1][-1])
print(x[0])

输出为:

  • 1.0
  • 9.0
  • [1. 2. 3.]

2)简单遍历:

x = np.array([[1.0, 2.0, 3.0],[3.4, 2.0, 9.0]])
for i in x:
print(i)

输出结果:

  • [1. 2. 3.]
  • [3.4 2. 9. ]

3)将高维数组转化为一维数组

x = np.array([[1.0, 2.0, 3.0],[3.4, 2.0, 9.0]])
y = x.flatten()
print(y)

输出结果为:

  • [1. 2. 3. 3.4 2. 9. ]

这与初始化的数据顺序是一致的。(与matlab有差异)

4)bool索引的使用

x = np.array([[1.0, 2.0, 3.0],[3.4, 2.0, 9.0]])
print( x > 2.5)
print(x[x > 2.5])

输出为

  • [[False False True]
  • [ True False True]]
  • [3. 3.4 9. ]
print(x[x > 0])

输出为:

  • [1. 2. 3. 3.4 2. 9. ]

bool索引返回的是一维数组

二、Matplotlib库

Matplotlib是一个图形绘制库,可以将数据可视化

1、 绘制简单图形

1)生成数据

x = np.arange(0,6,0.1)#以0.1为步长,生成0到6的数据
y = np.sin(x)
print(x)
print(y)

输出结果为:

  • [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2. 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3. 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4. 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5. 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9]
  • [ 0. 0.09983342 0.19866933 0.29552021 0.38941834 0.47942554 0.56464247 0.64421769 0.71735609 0.78332691 0.84147098 0.89120736 0.93203909 0.96355819 0.98544973 0.99749499 0.9995736 0.99166481 0.97384763 0.94630009 0.90929743 0.86320937 0.8084964 0.74570521 0.67546318 0.59847214 0.51550137 0.42737988 0.33498815 0.23924933 0.14112001 0.04158066 -0.05837414 -0.15774569 -0.2555411 -0.35078323 -0.44252044 -0.52983614 -0.61185789 -0.68776616 -0.7568025 -0.81827711 -0.87157577 -0.91616594 -0.95160207 -0.97753012 -0.993691 -0.99992326 -0.99616461 -0.98245261 -0.95892427 -0.92581468 -0.88345466 -0.83226744 -0.77276449 -0.70554033 -0.63126664 -0.55068554 -0.46460218 -0.37387666]

2)绘制图形

plt.plot(x, y)
plt.show()

得到如下图形:

2、 其他功能的简单示例

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] #加上这句可以正常显示中文
x = np.arange(0,6,0.1)#以0.1为步长,生成0到6的数据
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, label="sin")
plt.plot(x, y2, linestyle = "--", label="cos") #用虚线绘制
plt.xlabel("x") #x轴标签
plt.ylabel("y") #y轴标签
plt.title("sin和cos函数")
plt.legend() #显示图例
plt.show()

效果:

3、 显示图像

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.image import imread
img = imread('timg.jfif')
plt.imshow(img)
plt.show()

显示效果: