numpy的学习需要把初中、高中和大学的数学重新学一遍,才能学好
越学越觉得对不起各位数学老师。
import numpy as np
# 一元通用函数
arr = np.arange(10)
arr1 = np.random.randn(8)*7
print(np.sqrt(arr)) #np.sqrt() 开平方
print(np.exp(arr)) #np.exp() 求e^x e=2.71828182845904523536
print(np.abs(arr)) #abs() 求绝对值 fabs()类似
print(np.square(arr)) #square() 计算每个数字的平方
print(np.log(arr)) #log,log2,log10,log1p,计算对数
print(np.sign(arr)) #sign() 计算每个数字的符号值,正数为1,负数为-1,0为0
print(np.ceil(arr)) #ceil() 计算大于等于该数字的最小整数值
print(np.floor(arr)) #floor() 计算小于等于该数字的最小整数值
print(np.rint(arr1)) #rint() 将元素保留到整数位
print(np.isnan(arr)) #isnan() 判断数组中是否有NaN
print(np.isfinite(arr)) #isfinite()数组是否有限 isinf() 数组是否无限
print(np.sin(arr)) #sin(),cos(),cosh(),sinh(),tan(),tanh()等 哎,都忘了
#二元通用函数
arr1 = np.random.randn(8)
arr2 = np.random.randn(8)
np.maximum(arr1,arr2) #maximum() 求最大值,两个参数的ndarry的shape要完全相同
np.add(arr1,arr2) #add() 两个数组相加
np.subtract(arr1,arr2) #subtract() 数组1-数组2
np.multiply(arr1,arr2) #multiply() 乘法
np.divide(arr1,arr2) #divide()除法
# 更多二元函数:
# np.minimum() np.fmin() 求最小值
# np.mod() 取余数
# np.copysign() 将第一个数组的符号值改为第二个数组的符号值
# np.greater(),np.greater_equal(),np.less() np.equal(),np.less_equal(),np.not_equal() 比较大小
# np.logical_and(),np.logical_or(),np.logical_not(),np.logical_xor() 与或非异或操作
#modf:返回一个浮点值数组的小数部分和整数部分
arr1 = np.random.randn(8)*7
remainder, whole_part = np.modf(arr1) #remainder:余数,whole_part:整数
#第一张图
import matplotlib.pyplot as plt
points = np.arange(-5,5,0.01)
xs, ys = np.meshgrid(points,points)
z = np.sqrt(xs**2+ys**2)
plt.figure()
plt.imshow(z,cmap=plt.cm.gray)
plt.colorbar()
plt.title("Image plot of $\sqrt{x^2 + y^2}$ for a grid of values")
plt.show()
#将条件逻辑作为数组操作
arr = np.random.randn(4,4)
print(np.where(arr>0,2,arr)) #如果arr的值大于0,则改为2,否则改为-2
# 数学与统计方法
arr1 = np.random.randn(5,4)
print(arr1.mean()) # mean() 求平均值
print(arr1.mean(axis=1)) # 计算每一列的平均值
print(arr1.mean(axis=0)) # 计算每一行的平均值
# 其他方法:
# std,var 标准差和方差
# min,max 最小值和最大值
# argmin,argmax 最大值和最小值的位置
# cumsum 从0开始元素累积和
# cumprod 从1开始元素累积积
arr2 = np.array([1,2,3,4,5,6,7])
print(arr2)
print(arr2.cumsum())
print(arr2.cumprod())
print(np.cumsum(range(101))[-1]) #求1-100的和
# 布尔数值组的方法:
arr = np.random.randn(100)
print((arr >0).sum()) #统计数组中正值的个数
bools = np.array([False,True,False,False])
print(bools.any()) #检查数组中是否有一个true
print(bools.all()) #检查数组中是否全部是true
# 排序
arr = np.random.randn(10)
arr.sort() #对数组中的值进行排序,由小到大
arr1 = np.random.randn(5,3)
arr1.sort(axis=1) #沿着列的方向进行排序 如果=0,就是沿着行的方向进行排序
#集合操作
# unique(X) 计算X的唯一值,并排序
# intersect1d(x,y) 计算x和y的交集,并排序
# union1d(x,y) 计算x和y的并集,并排序
# in1d(x,y) 计算x中的元素是否包含在y中,返回一个布尔值数组
# setdiff1d(x,y) 差集,在x中但是不在y中的元素
# setxor1d(x,y) 异或集,在x或者y中,但不属于xy的交集的元素
ints = np.array([1,2,3,1,1,2,3,4,5,5,2])
print(np.unique(ints))
#随机漫步:
nsteps = 1000
draws = np.random.randint(0,2,size=nsteps)
steps = np.where(draws > 0, 1, -1)
walk = steps.cumsum()
print(steps.mean())
print(walk.min())
print(walk.max())