Ipython
命令
启动:
ipython notebook/jupyter notebook
Ipython帮助文档
Help(参数)方法
?
??可以显示源码
Shift-Enter : 运行本单元,选中下个单元
Y : 单元转入代码状态
M :单元转入markdown状态
A : 在上方插入新单元
B : 在下方插入新单元
Double-D:伤处一行
Ctrl-A : 全选
Ctrl-Z : 复原
Shift-Enter : 运行本单元,选中下一单元
Ctrl-Enter : 运行本单元
Alt-Enter : 运行本单元,在下面插入一单元
Ipython魔法指令
运行外部Python文件:
%run a.py(当前路径)
运行计时(计算statement的运行时间):
%time statement
计算statement的平均运行时间:
%timeit statement
两个百分号来测试多行代码的平均运行时间:
%%timeit
statement1
statement2
statement3
%time一般用于耗时长的代码段
%timeit一般用于耗时短的代码段
查看当前会话中的所有变量与函数
查看所有变量与函数名称:
%who
查看详细信息:
%whos
返回一个字符串列表
%who_ls
Numpy
import numpy as np
ndarray创建
使用np.array()
一维
test = np.array([1,2,3,4,5])
多维
test = np.array([[1,2,3],[4,5,6]])
使用np的routines函数创建
np.ones(shape, dtype=None, order='C')
np.full(shape, fill_value, dtype=None, order='C')
np.eye(N, M=None, k=0, dtype=float)
#单位矩阵 任何一个有解的矩阵都可以约成单元矩阵 满秩矩阵
#无解的矩阵 叫奇异矩阵
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
线性的
np.arange([start, ]stop, [step, ]dtype=None)
np.random.randint(low, high=None, size=None, dtype='l')
np.random.randn(d0, d1, ..., dn)
标准正太分布
np.random.random(size=None)
生成0到1的随机数,左闭右开
ndarray的属性
ndim:维度
shape:形状(各维度的长度)
size:总长度
dtype:元素类型
数据类型转换
dog = np.random.randint(0,255, size = (456,730,3))
dog = dog.astype("uint8")
plt.imshow(dog)
ndarray的基本操作
索引
切片
nd[0:2] 左闭右开
nd[:-2]
变形(nd.reshape)
使用reshape函数,注意参数是一个tuple!
nd5 = nd4.reshape((1,12))
级联np.concatenate()
注意:
级联的参数是列表:一定要加中括号
维度必须相同
形状相符
【重点】级联的方向默认是shape这个tuple的第一个值所代表的维度方向
可通过axis参数改变级联的方向
axis
np.hstack与np.vstack 水平级联与垂直级联
nd1 = np.random.randint(0,10,size = (4,6))
nd2 = np.random.randint(50,100, size = (2,6))
#列相同, axis 轴0 (行) 行上面进行级联 保证列必须相同
np.concatenate([nd1,nd2], axis = 0)
切分
np.split()
np.hsplit()
np.vsplit()
nd = np.random.randint(0,100,size = (5,6))
np.vsplit(nd, [1,2,3])
np.hsplit(nd, [1,3,5])
np.split(nd, [2],axis = 1)
#axis = 0, vsplit 一样
#axis = 1 , hsplit 一样
副本
所有赋值运算不会为ndarray的任何元素创建副本。
对赋值后的对象的操作也对原来的对象生效
可使用copy()函数创建副本
nd = np.random.randint(0,10,size = 6)
nd_copy = nd.copy()
ndarray的聚合操作
求和
np.sum
最大最小值:
np.max/ np.min
其他聚合操作
操作文件
求平均值
求最大值
求最小值
计算标准差
Function Name NaN-safe Version Description
np.sum np.nansum Compute sum of elements
np.prod np.nanprod Compute product of elements
np.mean np.nanmean Compute mean of elements
np.std np.nanstd Compute standard deviation
np.var np.nanvar Compute variance
np.min np.nanmin Find minimum value
np.max np.nanmax Find maximum value
np.argmin np.nanargmin Find index of minimum value
np.argmax np.nanargmax Find index of maximum value
np.median np.nanmedian Compute median of elements
np.percentile np.nanpercentile Compute rank-based statistics of elements
np.any N/A Evaluate whether any elements are true
np.all N/A Evaluate whether all elements are true
np.power 幂运算
np.power([2,3,4], 3)
np.sum 和 np.nansum 的区别 nan not a number
nd = np.array([0,2,3,np.nan])
nd.sum()
#任何一个数操作nan 都是nan
np.nansum(nd)
#会把nan当成一个0.0
ndarray的矩阵操作
基本矩阵操作
加减乘除
广播
nd +3
加
np.add(nd, 3)
减
np.subtract(nd, 100)
乘
np.multiply(nd, 0)
除
np.divide(nd, 10)
矩阵积np.dot
nd1 = np.random.randint(0,10,size = (2,3))
nd2 = np.random.randint(1,10,size = (3,2))
np.dot(nd1,nd2)
真正矩阵操作(未整理)
矩阵创建
使用 mat 方法将 2 维数组转化为矩阵
也可以使用 Matlab 的语法传入一个字符串来生成矩阵
利用分块创造新的矩阵
矩阵运算
矩阵与向量的乘法
逆矩阵
矩阵指数表示矩阵连乘:
广播机制
【重要】ndarray广播机制的两条规则
规则一:为缺失的维度补1
规则二:假定缺失元素用已有值填充
m = np.ones((2, 3)) a = np.arange(3)
m+a
a = np.arange(3).reshape((3, 1)) b = np.arange(3)
a+b
ndarray的排序
排序
def sort_nd(nd):
for i in range(nd.size):
for j in range(i, nd.size):
if nd[i] > nd[j]:
nd[i],nd[j] = nd[j], nd[i]
return nd
def sort_nd2(nd):
for i in range(nd.size):
index_min = np.argmin(nd[i:])+ i
nd[i], nd[index_min] = nd[index_min], nd[i]
return nd
快速排序
np.sort()与ndarray.sort()都可以,但有区别:
np.sort()不改变输入
ndarray.sort()本地处理,不占用空间,但改变输入
np.sort()不改变输入
ndarray.sort()本地处理,不占用空间,但改变输入
部分排序np.partition(a,k)
np.partition(a,k)
有的时候我们不是对全部数据感兴趣,我们可能只对最小或最大的一部分感兴趣。
当k为正时,我们想要得到最小的k个数
当k为负时,我们想要得到最大的k个数