numpy matplot等python常用类库的使用

本文引用和使用的类库

  • import numpy as np
  • import matplotlib.pyplot as plt
  • from sklearn import datasets

Jupyter Notebook’s Learning to writing

Toolbar

  • 可以进行 Cell代码行的编写运行
  • 可以切换Cell编写模式——为Markdown的模式
  • Help当中可以快速浏览并且更改使用的快捷键

快捷键

  • a/b 快速插入一行(在相应的选中行的上面或者下方)
  • x 剪切/删除一行
  • m 切换为markdown模式
  • y 切换为coding模式

优点

每次不用总是重新加载数据
只需要加载一次就可以!所以方便
注意:下面定义的变量,在上方也可以用!除非点击Kernel——Restart & run all

以上就可以充值变量上下文。

Jupyter Notebook 高级-魔法命令

    %run    #调用并且 加载对应的脚本/方法。
    %timeit #只能写一句话!测试 耗费时间
    %%timeit #测试下面耗时
    %time #测试一句话的cpu和人类感知的实际时间
    %%time #测试多行代码耗时

%run? #查看对应方法的 帮助文档

lsmagic #查看当前环境下,所有的魔法命令

numpy.array基础

选择为什么不选择List

Python List 的特点

    L = [i for i in range(10)]
    # 像是cell  可以放置多种不同类型的元素在List中。
    # List十分灵活
    import array
    arr = array.array('i',[ i for i in range(10) ])
    #array模块是python中实现的一种高效的数组存储类型。它和list相似,但是所有的数组成员必须是同一种类型,在创建数组的时候,就确定了数组的类型
    #array.array(typecode,[initializer]) --typecode:元素类型代码;initializer:初始化器,若数组为空,则省略初始化器
    arr = array.array('i',[0,1,1,3])
    print(arr)
    #array('i', [0, 1, 1, 3])

    #array.typecode -- 对象属性
    print('\n 输出 用于创建数组的类型代码字符:')
    print(arr.typecode)
    # 输出 用于创建数组的类型代码字符:
    #i

区别List 、 array、 numpy.array

  • Python的List不要求存储同样的类型,带来效率问题。
  • array的缺点是没有将数据当做向量或者矩阵,不支持基本运算。
  • nparr.dtype —— 只有一种类型的数据类型在nparr中!
    而且 nparr可以有 整型 和 浮点型
    而且 nparr可以用来生成 矩阵和向量之类的。

使用 range 创建list列表

  • range(start, stop[, step])

参数说明:

start: 计数从 start 开始。默认是从 0 开始。例如range(5)等>价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, >5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, >5, 1)

函数方法

  • np.arange(0, 20, 2)

#[0, 20) 步长为2的

  • np.linspace(0, 20, 10)

#[0, 20] 区间中截取出10个数字

  • np.random.randint( 0, 10, 10/(3,5) )

[0,10)的随机10 个数字;或者 3行5列!

  • np.random.random( 10/(3, 5) )

0-1之间均匀的浮点数

  • np.random.seed( 666 )

给予一个伪随机数,就能对应生成确定的随机矩阵。

  • np.random.normal( 10, 100, (3,5))

#默认:均值为0 方差为1,的随机的浮点数。上面是均值为10、方差为100的 3行5列的矩阵!

  • np.random.uniform( 0., 10., size = 100 )

产生100个 [0,100) 的浮点数

查看文档

  • np.random?
  • help(np.random)

其它创建numpy.array的方法

  • np.zeros(10)
  • np.ones((3,5))
  • np.full( (3,5), 666 )

numpy.arrary 的基本操作

  • X = np.arange(15).reshape((3, 5))
    15个元素 重新构成3*5的矩阵
  • X.ndim #2(二维数组)
  • X.shape #(3,5)

注意: X.shape[0] == 3

  • X.size #15

数据访问方法

多维数组不建议:X[0][0]
建议使用:X[0, 0]

切片

切片访问: x[0:5:2] 【0,5) 步长为2 NOT X
X[:2, :3] #前两行的 前三列
X[ :, 0] #取第一列

子矩阵 在父亲矩阵中使用的引用!所以也会改变 父亲矩阵!
除非 X[:2, :3].copy() —— 来进行非引用拷贝

Reshape

不改变 原来的数据、而是改变成矩阵!但是需要复制!不会

  • B = x.reshape(1, 10)
  • B

注意这个有两个维度!

  • array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
  • x.reshape( 2, -1)

注意这里是让 x转化成两行的元素,自动化分列数

np.array的合并和分割

np.concatenate()

  • A = np.array([[1, 2, 3],
    [4, 5, 6]])
  • np.concatenate([A, A])

array([[1, 2, 3],
[4, 5, 6],
[1, 2, 3],
[4, 5, 6]])

  • np.concatenate([A, A], axis=1)
  • array([[1, 2, 3, 1, 2, 3],
    [4, 5, 6, 4, 5, 6]])

默认为:(轴)axis=0,表示进行第一维度链接
等于1 表示进行第二维度连接

  • np.concatenate([A, z.reshape(1, -1)])

注意concat 只能进行相同纬度的叠加!需要把z向量转化为 矩阵!

  • np.vstack([A, z])

进行A z的纵向链接, 相当于加上一行,在自己这一行后面

  • np.hstack([A, z]) #加上一列

进行A z的横向矩阵链接, 相当于加上一列,在自己这一行一列 后面

强制转化 数据类型

x = np.array( X, dtype=float )

np.slit()

  • x1, x2, x3 = np.split(x, [3, 7])

切分点 0–2 3–6 7–9(x = 0–9)

  • A1, A2 = np.split(A, [2], axis=1)

切分矩阵,默认0-第一维度-行方向 第二行切割注意:矩阵是从第0行开始的!,所以 第二行在A2中!

  • upper, lower = np.vsplit(A, [2])

进行垂直方向 上下切分矩阵。

  • left, right = np.hsplit(A , [2])

进行水平方向 进行左右切分

  • y = array([[ 3],
    [ 7],
    [11],
    [15]])

为了进行4行1列的矩阵–转变为向量

  • y[:, 0]

抽出所有的行,只要第一列。变为:array([ 3, 7, 11, 15]) —— 向量了!

是为了,对数据进行 预处理而进行学习使用的!

np.delete()

X.shape

(150,2)
X_new = np.delete( X, 138, axis=0 )
直接把X的第138行给删除了

numpy.array中的运算

numpy直接就能 数组看做矩阵、向量进行运算!

Universal Functions

numpy 遵循这个直接运算要求而且快!

直接 + - ×
/ 浮点数出发
// 证书的出发!
x ** 2 幂运算
x % 2
1 / x

  • np.abs()
  • np.sin()
  • np.cos()
  • np.tan()
  • np.exp(x) #e的x次方
  • np.power(3, x) #3的x次方
  • np.log(x) #以e为底的 函数
  • np.log2(x) # 以2为底的函数
  • np.log10(x) #以10为底的 函数

矩阵运算

  • A + - * B

A*B 是指对应元素及进行运算! 不是标准矩阵之间惩罚

  • A.dot(B)

A和B 两矩阵进行标准的惩罚运算。

  • A.T

矩阵转置方法。

向量v和矩阵A的运算

  • v+A

相当于: np.vstack([v] * A.shape[0]) + A

  • np.tile(v, (2, 1))

堆叠向量v, 行堆叠2次,列堆叠1次相当于上方!

  • v*A

v.dot(A) —— 矩阵乘法!
A.dot(v) —— v会根据矩阵A进行 自动调整自己是行向量,还是列向量!

矩阵的逆

  • np.linalg.inv(A)

linear algebra //线性代数
方阵才有 逆矩阵

  • pinvA = np.linalg.pinv(X)

伪 逆矩阵!可求出不是方阵的伪逆矩阵!

  • X.dot(pinvA)

仍然是一个 方阵.

向量的模

  • w1 = np.linalg.norm(w)

求出向量w的模

  • w / w1

对应求出 w的单位向量

矩阵的聚合操作

  • np.sum(L)
  • np.min() / np.max()

等同于 array.min()

  • np.sum( X, axis=0 )

沿着行方向进行运算 相加,所以最终是列加和。

  • np.prod(X)

X中进行乘积

  • np.mean(X) / np.median(X)

求均值 和 中位数

  • np.percentile( big_arrary, q=50 )

找百分位 for percent in [0,25,50,75,100]:

  • np.var(big_array) / np.std(big_array)

求方差/ 标准差

索引

arg方式

为了查看最小值,以及最小值的位置在哪

  • np.argmin(x)

198532 == x[198532]

排序和使用索引

  • np.random.shuffle(x)

直接进行乱序处理

  • np.sort(x)

返回修改后的数组

  • x.sort()

排好x的顺序

  • np.sort(X , axis=1)

沿着列进行排序, 把每一行排好顺序了。

  • np.argsort(x)

拍好 索引顺序的数组,通过索引,找大小。

  • np.partition(x, 3)

标定点3, 小于3的在左边, 大于3的在右边

  • np.argpartition(x, 3)

仍然是进行 索引的标定3

将数组打乱随机排列 两种方法:

  • np.random.shuffle(x):在原数组上进行,改变自身序列,无返回值。
  • np.random.permutation(x):不在原数组上进行,返回新的数组,不改变自身数组。

Fancy Indexing

  • x[3:9:2]

2为步长 进行索引

  • ind = [3, 5 ,8]
  • x[ind]

对应进行索引!

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

对应进行索引,根据ind索引,建立 新的x矩阵。

  • col = np.array([1, 2, 3])
  • x[:2, col]

x中前两行的第0行 和 第1行, 1 2 3列

  • col = [True, False, True, False]

x[ 1:3, col]

numpy.array的比较

  • example_digits = noisy_digits[y==0,:][:10]

只要对应前十行

  • x > 3

返回bool值

  • np.sum(x<=3) //统计x中 小于等于3的个数。

np.count_nonzero(x<=3)

  • np.any(x==0) //true 有就行

np.all(x>=0) //true

  • np.sum( x%2==0 )

np.sum(x%2==0, axis=1)

  • np.all( x > 0, axis=1 )

np.sum( (x>3) & (x<10) )

  • np.sum( (x%2==0) | (x > 10) )

np.sum( ~(x==0) )

  • x[x[:,3]%3==0, :]

最后一列被三整除为 0,3个True——转化为第0行和第3行

Pandas

  • Pandas进行预处理——然后转化为 numpy——再把numpy加入到 sklearn之中进行处理、操作!

以上!numpy进行机器学习矩阵进行处理的方法,完成。
因为 sklearn是需要numpy的数据进行操作的,然而Pandas方便进行处理,所以 需要进行这样的过度。

matplotlib 基础

  • import matplotlib as mpl
  • import matplotlib.pyplot as plt

plt.plot绘制直线图

  • plt.plot(x, y, color=“red”, linestyle="–", label=“cos(x)” )

应该再加上: plt.legend() 用来显示对应曲线的图例

  • plt.show()

linestyle 绘制出来 : -, – -不同的图像形式。

  • plt.xlim(-5, 15)
  • plt.ylim(0, 1)

更改 x,y轴的范围.

  • plt.axis([-1 ,11 ,-2 ,2])
  • plt.xlabel(""x value)/ pltylabel(“y value”)
  • plt.title(“添加对应标题.”)

plt.scatter 绘制散点图

  • plot.scatter(x, siny, alpha=0.5)

通常绘制二维特征/两个特征的时候 用散点图。
不透明度—— 0完全透明,1完全不透明。

  • plt.scatter(X[y0,0], X[y0,1], color=“red”, marker=“o”)
    plt.scatter(X[y1,0], X[y1,1], color=“blue”, marker="+")
    plt.scatter(X[y2,0], X[y2,1], color=“green”, marker=“x”)
    plt.show()

高斯核函数讲解

l1, l2 = -1, 1

X_new = np.empty((len(x), 2))
# 将一维数据 映射到二维上面了,利用 高斯核函数.
for i, data in enumerate(x):
    X_new[i, 0] = gaussian(data, l1)
    X_new[i, 1] = gaussian(data, l2)

# enumerate( x ) 讲x的数值放入到data中,索引放入到i中.

关键学会 enumerate的使用。

读取数据和简单的数据探索

  • from sklearn import datasets
  • iris = datasets.load_iris() # 鸢尾花数据集
  • iris.keys()
  • iris.data #相对应的数据
  • iris.target #相对应的种类
    y = iris.target
    plt.scatter(X[y==0,0], X[y==0,1], color="red")  #找出鸢尾花对应的种类所在行,
    #然后显示  这一行的,0\1两个特征~ OK~
    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()

数据处理代码操作注意事项

使用copy()数值
y = digits.target
y = digits.target.copy() # 这样写作为一个拷贝才正确

使用try except
try:
return 2 * precision * recall / (precision + recall)
except:
return 0.0

你可能感兴趣的:(笔记,Python,笔记,python,即用)