Scipy练习

Exercise 10.1: Least squares
Generate matrix A ∈ R m×n with m > n. Also generate some vector b ∈ R m .

Now find 


Print the norm of the residual.

代码:

import numpy as np
from scipy.optimize import leastsq

m = 30
n = 20
A = np.random.rand(m, n)
b = np.random.rand(m, 1)
x = np.random.rand(n, 1)

def residuals(x, A, b):
    return np.ravel(A.dot(x) - b)

res = leastsq(residuals, x, (A, b))
norm = np.linalg.norm(residuals(res[0], A, b))
print(res[0])
print(norm) 

输出:

[ 0.26741717 -0.00122432  0.11224357 -0.01251559  0.01099381  0.09011149
  0.18331027  0.22826289 -0.0110512  -0.05081341 -0.07351126  0.07074645
 -0.03653636  0.02772971  0.02575132  0.02336123  0.06607123 -0.06637247
 -0.03575784  0.11335802]
8.760444288588074


Exercise 10.2: Optimization

Find the maximum of the function


代码:

from scipy.optimize import minimize_scalar
import numpy as np

def f(x):
    return -np.sin(x-2)**2 * np.exp(-x**2)

res = minimize_scalar(f)
print(res)

输出:

     fun: -0.9116854118471548
    nfev: 25
     nit: 21
 success: True
       x: 0.21624132858697098


Exercise 10.3: Pairwise distances
Let X be a matrix with n rows and m columns. How can you compute the pairwise distances between
every two rows?
As an example application, consider n cities, and we are given their coordinates in two columns. Now
we want a nice table that tells us for each two cities, how far they are apart.

Again, make sure you make use of Scipy’s functionality instead of writing your own routine.

代码:

from scipy.spatial.distance import pdist, squareform
import numpy as np

n = 10
d = np.random.rand(n, 2)

am = squareform(pdist(d))
print(am)

输出:

[[0.         0.59375672 0.34885387 0.49934648 0.18621826 0.41217687 0.42730273 0.48378327 0.63717365 0.60566626]
 [0.59375672 0.         0.41679726 0.5172814  0.77642933 0.36466576 0.26385413 0.689037   0.9816709  0.86817596]
 [0.34885387 0.41679726 0.         0.17464231 0.51781333 0.49546908 0.15560288 0.28320269 0.95375586 0.89089568]
 [0.49934648 0.5172814  0.17464231 0.         0.64835019 0.66371232 0.2663659  0.19738647 1.12182254 1.06370784]
 [0.18621826 0.77642933 0.51781333 0.64835019 0.         0.55047218 0.61129382 0.58493965 0.57203568 0.58393739]
 [0.41217687 0.36466576 0.49546908 0.66371232 0.55047218 0.         0.4245734  0.76099903 0.61882513 0.50359959]
 [0.42730273 0.26385413 0.15560288 0.2663659  0.61129382 0.4245734  0.         0.42593457 0.96571265 0.88195774]
 [0.48378327 0.689037   0.28320269 0.19738647 0.58493965 0.76099903 0.42593457 0.         1.12010628 1.08650083]
 [0.63717365 0.9816709  0.95375586 1.12182254 0.57203568 0.61882513 0.96571265 1.12010628 0.         0.1440625 ]
 [0.60566626 0.86817596 0.89089568 1.06370784 0.58393739 0.50359959 0.88195774 1.08650083 0.1440625  0.        ]]


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值