跳转到opencv-machine-learning文件夹:
cd C:\Users\Kannyi\opencv-machine-learning
激活所创建的conda环境:
activate py38
打开一个新的IPython会话:
ipython
引入NumPy模块并验证它的版本:
import numpy
numpy.__version__
使用np作为别名引入NumPy模块并验证它的版本:
import numpy as np
np.__version__
使用list()命令创建一个整数的列表,range(x)函数将会拼出从0到x-1之间所有的整数:
int_list=list(range(10))
int_list
#结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
可以让Python在整数列表int_list中迭代所有的元素,并使用str()函数处理每个元素,来创建一个字符串的列表:
str_list=[str(i) for i in int_list]
str_list
#结果:['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
将int_list中的所有元素都重复两遍:
int_list*2
#结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
将int_list中的所有元素都乘以2:
int_arr=np.array(int_list)
int_arr
#结果:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
int_arr*2
#结果:array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
每个NumPy数组还有以下属性:
print("int_arr ndim:",int_arr.ndim)
#结果:int_arr ndim: 1
print("int_arr shape:",int_arr.shape)
#结果:int_arr shape: (10,)
print("int_arr size:",int_arr.size)
#结果:int_arr size: 10
print("int_arr dtype:",int_arr.dtype)
#结果:int_arr dtype: int32
通过索引访问单个数组元素:
int_arr[3]
#结果:3
从数组的尾部开始索引,即负索引:
int_arr[-1]
#结果:9
int_arr[-2]
#结果:8
将数组中下标为2~(5-1)的元素切片:
int_arr[2:5]
#结果:array([2, 3, 4])
将数组中下标为0~(5-1)的元素切片:
int_arr[:5]
#结果:array([0, 1, 2, 3, 4])
将数组中下标为2的倍数(包括0)的元素切片:
int_arr[::2]
#结果:array([0, 2, 4, 6, 8])
将数组中的元素逆序切片:
int_arr[::-1]
#结果:array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
创建一个3行5列的二维数组,其中所有数组的初始值为0,如果不指定数据类型,NumPy会默认使用浮点类型:
arr_2d=np.zeros((3,5))
arr_2d
'''
结果:
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
'''
创建一个3×2×4的三维数组,其中所有数组的初始值为1:
arr_float_3d=np.ones((3,2,4))
arr_float_3d
'''
结果:
array([[[1., 1., 1., 1.],
[1., 1., 1., 1.]],
[[1., 1., 1., 1.],
[1., 1., 1., 1.]],
[[1., 1., 1., 1.],
[1., 1., 1., 1.]]])
'''
通过数组切片获取arr_float_3d中的第一个二维数组:
arr_float_3d[0,:,:]
'''
结果:
array([[1., 1., 1., 1.],
[1., 1., 1., 1.]])
'''
将NumPy数组中的dtype属性设置为8位整型,然后将数组中的所有元素乘以255来创建一个3×2×4的三维数组:
arr_uint_3d=np.ones((3,2,4),dtype=np.uint8)*255
arr_uint_3d
'''
结果:
array([[[255, 255, 255, 255],
[255, 255, 255, 255]],
[[255, 255, 255, 255],
[255, 255, 255, 255]],
[[255, 255, 255, 255],
[255, 255, 255, 255]]], dtype=uint8)
'''
下载手写数字(0~9)的MNIST数据集:
from sklearn import datasets
mnist_data=datasets.fetch_openml("mnist_784")
x=mnist_data["data"]
y=mnist_data["target"]
mnist_data.data.shape
#结果:(70000, 784)
mnist_data.target.shape
#结果:(70000,)
检查所有目标的值(去重):
import numpy as np
np.unique(mnist_data.target)
#结果:array(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], dtype=object)
使用mpl作为别名引入Matplotlib模块:
import matplotlib as mpl
使用plt作为别名引入Matplotlib.pyplot模块:
import matplotlib.pyplot as plt
绘图自动出现命令:
%matplotlib
绘图手动出现命令(一般调用上面的%matplotlib命令,不用这个):
plt.show()
在x坐标轴上创建一个从0到10的线性空间,以及100个采样点:
import numpy as np
x=np.linspace(0,10,100)
使用NumPy中的sin函数得到所有x点的值,并通过plt中的plot函数把结果画出来:
plt.plot(x,np.sin(x))
上面的命令会得到下面的绘图输出结果:
将绘图结果保存至C:\Users\Kannyi目录下:
plt.savefig('Figure1.png')
引入sklearn的数据集:
from sklearn import datasets
载入实际数据:
digits=datasets.load_digits()
digits有两个不同的数据域:
print(digits.data.shape)
#结果:(1797, 64)
print(digits.images.shape)
#结果:(1797, 8, 8)
使用NumPy的数组切片从数据集获取一幅图像,此处是从1797个元素的数组中获取了第一行数据,对应的是8×8=64个像素:
img=digits.images[0,:,:]
使用plt中的imshow函数来绘制这幅图像,cmap参数指定了一个颜色映射,在灰度图像的情况下,gray颜色映射更有效:
plt.imshow(img,cmap='gray')
上面的命令会得到下面的绘图输出结果:
我们可以使用plt的subplot函数绘制全部数字的样例,subplot需要指定行数、列数以及当前的子绘图索引:
for image_index in range(10):
subplot_index=image_index+1
plt.subplot(2,5,subplot_index)
plt.imshow(digits.images[image_index,:,:],cmap='gray')
image_index从0开始,subplot_index从1开始。
subplot函数有指定绘图位置的作用,可以认为是提供画布;imshow函数是将绘图放置在对应的画布上。
上面的命令会得到下面的绘图输出结果: