6.20学习:

Numpy中的比较和Fancy Indexing

Funcy Indexing

import numpy as np
x = np.arange(16)
x

  输出:array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])。

x[3:9]
# 利用一个切片访问一个区间
x[3:9:2]
# 等步长的返回

  那如果想访问3、5、8怎么办呢?

ind = [3, 5, 8]
x[ind]
# 这样就可以访问到3、5、8了,这就是numpy中的funcy indexing

  输出:array([3, 5, 8])。

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

  输出:array([[0, 2],
       [1, 3]])。

X = x.reshape(4,-1)
X

  输出:array([[ 0, 1, 2, 3],
       [ 4, 5, 6, 7],
       [ 8, 9, 10, 11],
       [12, 13, 14, 15]])。

row = np.array([0, 1, 2])
col = np.array([1, 2, 3])
X[row,col]
# 这样就可以取出3个交点

  输出:array([ 1, 6, 11])。

col = [True, False, True, True]
X[1:3,col]
# 按照True和False也可以访问到

  输出:array([[ 4, 6, 7],
       [ 8, 10, 11]])。

Numpy.array比较

  x:array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])。

x < 3
# 把x中的数和3比较

  输出:array([ True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False])。

2 * x == 24 - 4 * x
# 还可以进行更复杂的比较

  输出:array([False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False])。

  可以利用比较符来判断array中有多少个小于3的数字。

np.sum(x < 3)
# 输出 3

np.sum((x > 3) & (x < 10))
# 统计大于3且小于10的数字个数
# 输出 6
# 注意:
# && 条件运算符连接的是两个bool值,也返回一个bool值
# & 位运算符连接的是两个有意义的数组

np.sum((x % 2 == 0) | (x > 10))
# 统计是偶数或者大于10的数字个数
# 输出 11

np.sum(~(x == 0))
# 统计非0个数
# 输出 15
np.count_nonzero(x < 3)
# 查看x中有多少小于3的非0数字
# 与上等价
np.any(x == 0)
# 输出 True
# 看x中是否有0
# 同理,可以用np.any(x < 0)
np.all(x >= 0)
# x中是否所有元素都大于等于0?
# 输出 True
np.all(x > 0)
# x中是否所有元素都大于0?
# 输出 False
np.sum(x % 2 == 0)
# 看数组X中有多少偶数
# 输出 8
np.sum(X%2 == 0,axis = 1)
# 看每一行有多少个偶数

  输出:array([2, 2, 2, 2])。

x[x < 5]
# 查看x中小于5的具体数字
# 输出 array([0, 1, 2, 3, 4])

x[x % 2 == 0]
# 查看x中偶数的具体数字
# 输出 array([ 0, 2, 4, 6, 8, 10, 12, 14])
X[X[:,3] % 3 == 0, :]
# 嵌套使用X[行:列]
# X[:,3] 取出X的第3列的值
# X[:,3] % 3 == 0 把X中第3列能整除3的设置位True
# X[X[:,3] % 3 == 0, :] 取出满足最后一列数字可以被3整除的行

  输出:array([[ 0, 1, 2, 3],
       [12, 13, 14, 15]])。

Matplotlib数据可视化

Plot折线图

import matplotlib as mpl
import matplotlib.pyplot as plt
# 通常,我们只使用matplotlib中的子模块pyplot
x = np.linspace(0,10,100)
# 在0-10之间均分100份输出
y = np.sin(x)
plt.plot(x,y)
# 只运行的话只会返回一个对象
plt.show()
# 加一个show()才会显示
# 实质上这是一个折线图,因为我们分割的比较密,所以看起来式曲线
451bb6912862597b2d34a9c26823ddb
cosy = np.cos(x)
siny = y.copy()
plt.plot(x,siny)
plt.plot(x,cosy)
plt.show()
# 在plt.show()之前创建两条曲线,再show()即可画出两条线
6e94d5fdad7751e927063c0da73ee12
plt.plot(x,siny)
plt.plot(x,cosy,color = "red",linestyle = "--")
plt.show()
1979898bfedb815dc87643ea5dc0712

  常用颜色:’b’ 蓝色,’m’ 洋红色,’g’ 绿色,’y’ 黄色,’r’ 红色,’k’ 黑色,’w’ 白色,’c’ 青绿色,’#008000’ RGB 颜色符串。多条曲线不指定颜色时,会自动选择不同颜色。

  线型参数:‘‐’ 实线,’‐‐’ 破折线,’‐.’ 点划线,’:’ 虚线。

plt.plot(x,siny)
plt.plot(x,cosy,color = "red",linestyle = "--")
plt.xlim(-5,15)
# 横轴范围限制在(-5,15)之间
# 同理有 plt.ylim(0,1)
plt.show()
0908e9c39ef5f073a7dd93dc5f54486
plt.plot(x,siny)
plt.plot(x,cosy,color = "red",linestyle = "--")
plt.axis([-1,11,-2,2])
# 通过axis([x1,x2,y1,y2])来指定范围
plt.show()
0459278793a2c9f6ade99a83f82a516
plt.plot(x,siny)
plt.plot(x,cosy,color = "red",linestyle = "--")
plt.xlabel("X Axis")
plt.ylabel("Y Value")
# 给X轴、Y轴命名,中文需要扩展包
plt.show()
891cd6511e533efb1fd9ccbf1cc7aed
plt.plot(x, siny, label="sin(x)")
plt.plot(x, cosy, color = "red",linestyle = "--",label="cos(x)")
# 利用label标签来标注曲线
plt.legend()
# 同时也要加上plt.legend()渲染出来
plt.show()
b7012ebc32099561cb103092a809673
plt.plot(x, siny, label="sin(x)")
plt.plot(x, cosy, color = "red",linestyle = "--",label="cos(x)")
plt.legend()
plt.title("Welcome to the ML World!")
# 最后给图加上标题
plt.show()
fb8db82c1a2fffc6ffb75cc8fd8f3c8

Scatter散点图

plt.scatter(x, siny)
plt.show()
bcbdd15d77d2b88338d27abbef26f75
plt.scatter(x,siny)
plt.scatter(x,cosy,color="red")
plt.show()
d1a14a549dd5d379c82423633c35310
x = np.random.normal(0,1,10000)
y = np.random.normal(0,1,10000)

plt.scatter(x, y, alpha=0.5, s=1)
# alpha透明度[0-1],s大小(默认20),c颜色(默认蓝色'b')

plt.show()
4584a2427ce27034d3eedb93bd3c2c4

数据加载和简单的数据探索

import numpy
import matplotlib as mpl
import matplotlib.pyplot as plt
from sklearn import datasets
iris = datasets.load_iris()
iris.keys()
# 查看鸢尾花数据集的字典格式

  输出:dict_keys([‘data’, ‘target’, ‘frame’, ‘target_names’, ‘DESCR’, ‘feature_names’, ‘filename’, ‘data_module’])。

print(iris.DESCR)
# 查看iris的文档
iris.data
00fb5c2ef2cf30c9bcad4c0d1dbb076
iris.data.shape
# 输出 (150, 4)
iris.feature_names
# 查看四个属性

  输出:[‘sepal length (cm)’,
      ‘sepal width (cm)’,
      ‘petal length (cm)’,
      ‘petal width (cm)’]。

X = iris.data[:,:2]
# 取出iris中数据集的前两列
X.shape
# 输出 (150, 2)
plt.scatter(X[:,0],X[:,1])
plt.show()
ac2b55d7a73591085453c8ea9a67cb8
y = iris.target
plt.scatter(X[y==0,0],X[y==0,1],color="red")
# 取出y==0条件下的第0个特征,取出y==0条件下的第1个特征
plt.scatter(X[y==1,0],X[y==1,1],color="blue")
plt.scatter(X[y==2,0],X[y==2,1],color="green")
plt.show()
b5e0728859076ded8a4054b80c99e9a
y = iris.target
plt.scatter(X[y==0,0],X[y==0,1],color="red",marker="o")
plt.scatter(X[y==1,0],X[y==1,1],color="blue",marker="+")
plt.scatter(X[y==2,0],X[y==2,1],color="green",marker="*")
plt.show()
b630d4cd9e9bf7791f7f40053b27c8a