Exercise10-Scipy

Exercise10.1 Least squares

这里写图片描述

分析:

使用numpy.linalg.lstsq来计算。

相关说明:

  1. numpy.random.randint
    low、high、size三个参数。默认high是None,如果只有low,那范围就是[0,low)。如果有high,范围就是[low,high)。

    np.random.randint(2, size=10)
    array([1, 0, 0, 0, 1, 1, 0, 0, 1, 0])

np.random.randint(1, size=10)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

np.random.randint(5, size=(2, 4))
array([[4, 0, 2, 1],
[3, 2, 2, 0]])

  1. numpy.linalg.lstsq做线性回归
    A = np.vstack([x, np.ones(len(x))]) np.ones(len(x))用以放置常数项
    这里写图片描述

代码:

#10.1
A = np.random.randint(10,size = (8,6))
b = np.random.randint(10,size = 8)
ls = np.linalg.lstsq(A, b, rcond=0)  
print(ls[0]) #solution
print(ls[1]) #residual

结果:

这里写图片描述

Exercise 10.2: Optimization

这里写图片描述

分析:

使用optimize.fmin获取相反函数的最小值,即为所求函数的最大值。

相关说明:

  1. optimize.fmin需要提供一个估计的x值(对应y的最小值),可以先作出函数图像来确定。这里根据图像定为0。
    第二个参数x0 initial guess
    https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin.html#scipy-optimize-fmin
  2. np.exp(-x*x)

代码:

#10.2
def f(x):
    return -(np.sin(x-2)**2)*np.exp(-x*x) #use'-'to find the max
m = optimize.fmin(f,0)
print(m)

结果:

这里写图片描述

Exercise 10.3: Pairwise distances

这里写图片描述

分析:

使用scipy的距离计算库scipy.spatial.distance的pdist方法。

相关说明:

https://blog.csdn.net/pipisorry/article/details/48814183
有很详细的关于该库的相应方法说明。
摘录:Y = pdist(X, ’euclidean’) #d=sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)
函数也可以用自己写的,如欧式距离计算可以这样:
dm = pdist(X, lambda u, v: np.sqrt(((u-v)**2).sum()))

代码:

X = np.random.randint(10,size = (8,10))
distance = dis.pdist(X,'euclidean')
print(distance)

结果:

这里写图片描述

完整代码:

import numpy as np 
from scipy import optimize
import scipy.spatial.distance as dis

#10.1
A = np.random.randint(10,size = (8,6))
b = np.random.randint(10,size = 8)
ls = np.linalg.lstsq(A, b, rcond=0)  
print(ls[0]) #solution
print(ls[1]) #residual

#10.2
def f(x):
    return -(np.sin(x-2)**2)*np.exp(-x*x) #use'-'to find the max
m = optimize.fmin(f,0)
print(m)

#10.3
X = np.random.randint(10,size = (8,10))
distance = dis.pdist(X,'euclidean')
print(distance)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值