1.introduction to Numpy
import numpy as np
a = np.random.random([3,3])
使用numpy包的情况:
import time
numpy_array=np.array([1,2,3][2,1,3])
start=time.time()
arr*arr
end=time.time()
print(end-start)
使用loop循环的情况:
import time
start=time.time()
for i in arr:
print(i*i)
end=time.time()
print(end-start) //明显使用numpy包耗时较少
2.Create Arrays
生成数组最简单的方式就是使用array函数。array函数接收任意的序列型对象,生成一个新的包含传递数据的NumPy数组。
t=[1,2,3] / t=(1,2,3)
a = np.array(t,dtype=‘int 32’)
b = np.array([list1,list2]) //创建数组
a.dtype //每一个数组都有一个dtype属性,用来描述数组的数据类型。
可以使用astype方法显示地转换数组的数据类型 arr.astype(' ')
可以使用另一个数组的dtype属性,也可以使用类型代码传入数据类型。
a.shape //每一个数组都有一个shape属性,用来表征数组每一维度的数量。
np.zeros([2,2]) //创建两行两列全为0的数组
np.ones([2,3]) //创建两行三列全为1的数组
np.empty([2,3]) //创建两行三列没有初始化数值的数组
np.eye([3]) //创建3行3列 只有对角线为1,其余为0的数组
np.arange([start,end,space]) //从start到end(不包括end),步长为space
python内建函数range的数组版,返回一个数组
np.linspace([statr,end,num]) //从start到end之间 分为3等分
3.Basic Operations of Arrays
Arithmetic Operators
a*a //对应元素相乘
a*10 //所有元素乘以10
a**3 //每个元素3次方
a+a //对应元素相加
Matrix Operations
A*B //对应元素相乘
A>B //同尺寸数组之间的比较,会产生一个布尔数组
A.dot(B)
np.dot(A,B) //矩阵相乘
np.add(A,B) //对应元素相加
np.random.random是在半开放区间[0.0,1.0)之间生成随机数字
Other Operations
a.sum()
a.max() a.min()
mean 数学平均
argmin,argmax 最小值和最大值的位置
cumsum 从0开始元素累计和
cumprod 从1开始元素累积积
关于axis axis=0按列操作(行轴向) axis=1按行操作
例:a.sum(axis=0) //sum of each column
a.cumsum(axis=1) //累积相加 (1,1+2.1+2+3,1+2+3+4)
4.indexing,slicing and iterating
下标从0开始计数
a[index] //选取下标为index的元素 在一个二维数组中,索引对应的元素不再是一个值,而是一个一维数组。
a[start:end] //从start到end截取,不包括end
//如果你传入了一个数值给数组的切片,a[start:end]=var 数值被传递给了整个切片。
//区别与python的内建列表,数组的切片是原数组的视图
我们选取np_array部分的时候,创建了一个view (没有copy以前的值,而是直接改了array)
a_slice[0]=1
print(a_slice)
print(a)
如果不想对原来的array修改,可以把选取的部分copy出来
a.slice=a[0:5].copy()
数组的切片索引:a[1,:2] //选择第二行,但只选择前两列
//单独一个冒号表示选择整个轴上的数组
布尔索引:数组的比较操作也是可以量化的 data[name == 'Bob']会根据产生的布尔值数组对data数组进行筛选;
可以使用!=或在条件表达式前使用~对条件取反
对多个布尔值条件进行联合,需要使用数学操作符 如 & 和 丨
对于布尔值数组,有两个非常有用的方法any和all。any检查数组中是否至少有一个True,而all检查是否每个值都是True
np.sort方法返回的是已经排序好的数组拷贝,而不是对原数组按位置排序。
Multidimensional arrays
def f(x,y):
retrun x*y
np.fromfunction(f,(2,3),dtype=int) //对2行3列的各个坐标的x,y 做关于f的函数,
返回值在各坐标上。
5.Matrix Operations
a.T //把所有维度反过来
a.transpose() //可以指定到底要怎么变化 比如[0,2,1]意思是第一个维度不变,后两
个维度变换
np.linalg.inv( ) //求逆矩阵
np.linalg.qr() //计算QR分解
np.allclose(a,b) //求a,b是否相同
np.linalg.eig( ) //求特征值
np.trace(a) //算对角的和
np.arange(50).reshape([5,5,2]) //将0-49 50个数放在5*5*2的空间里
a.swapaxes(0,1) //交换坐标轴
np.bincount() // 统计 等于下标值 的数字有多少个
[2,1,1,3] 则 显示[0,2,1,1]即0没有,1有两个,2,3都有一个
6.Array processing
import matplotlib.pyplot as plt //画图用的包
x,y=np.meshgrid(np.arange(-10,10,1),np.arange(-10,10,1)) //x,y轴都是从-10到10,间隔1.
//np.meshgrid函数接收两个一维数组,并根据两个数组的所有(x,y)对生成一个二维数组。
a=np.array([1,2,3])
b=np.array([4,5,6])
condtion=np.array([True,False,False])
np.where(condtion,a,b) //相应位置为true 选择a中元素,为false选择b中元素。
np.where(b<0,0,b) //即意味着b中小于0的元素全部置为0,否则不变仍为b。
np.inld(a,b) //a中的元素是否存在于b中
np.unique() //去除集合中重复的元素
intersect1d(x,y) //x和y的交集 并排序
union1d(x,y) //x和y的并集 并排序
setdiff1d(x,y) //差集,在x中但不在y中的元素
setxor1d(x,y) //异或集,在x或y中,但不属于x,y交集的元素
7.Save and Load Array
np.save('array_a',a) //存储a,命名为array_a
np.load('array_a.npy') //读取array_a.npy文件
np.savez('two_array',x=a,y=a.T) //存储两个数组
np.load('two_array.npy')['x']
np.load('two_array.npy')['y']
np.savetxt('array_txt.txt',a,delimiter=",") //存储为txt格式,用逗号隔开
np.loadtxt('array_txt.txt',delimiter=",")
8.伪随机数生成
seed //向随机数生成器传递随机状态种子
shuffle //随机排列一个数列
rand //从均匀分布中抽取样本
randn //从均值0方差1的正太分布中抽取样本
normal //从正太(高斯)分布中抽取样本
beta //从beta分布中抽取样本
chisquare //从卡方分布中抽取样本