python3 科学计算_python3 科学计算2

numpy数组操作

import numpy as np

a = np.array([

[1,2,3,4],

[5,6,7,8],

[9,10,11,12]

])

a.shape

(3, 4)

a.shape=4,3

a

array([[ 1, 2, 3],

[ 4, 5, 6],

[ 7, 8, 9],

[10, 11, 12]])

a.shape=3,-1 # -1表示自动推断

a

array([[ 1, 2, 3, 4],

[ 5, 6, 7, 8],

[ 9, 10, 11, 12]])

生成序列

# 终点不在数组中

print(np.arange(0, 1, 0.1))

# 将区间等分,终点在数组中

print(np.linspace(0, 1, 10))

# 终点不在数组中

print(np.linspace(0, 1, 10, endpoint=False))

# 指数的线性划分,默认10为底,终点在数组中

print(np.logspace(0, 3, 4))

print(np.logspace(0, 3, 4, base=2))

[ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]

[ 0. 0.11111111 0.22222222 0.33333333 0.44444444 0.55555556

0.66666667 0.77777778 0.88888889 1. ]

[ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]

[ 1. 10. 100. 1000.]

[ 1. 2. 4. 8.]

print(

np.fromfunction(lambda x, y: x + y, [4, 3])

)

[[ 0. 1. 2.]

[ 1. 2. 3.]

[ 2. 3. 4.]

[ 3. 4. 5.]]

反转列表

s = '1234'

print(s[::-1])

r = slice(None, None, -1)

print(s[r])

运行时间比较,np的数字类型比Python的原生类型慢

a=3.14

b=np.float64(3.14 )

%timeit a*a

%timeit b*b

51.7 ns ± 0.579 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

185 ns ± 1.62 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

极大似然估计

0818b9ca8b590ca3270a3433284dd417.png

import numpy as np

import pylab as pl

# 正态分布概率密度计算

def normal_pdf(mean, var, x):

return 1 / np.sqrt(2 * np.pi * var) * np.exp(-(x - mean) ** 2 / (2 * var))

# 设置随机种子

np.random.seed(42)

# 产生十个正太样本

data = np.random.normal(0, 2.0, 10)

# 计算均值和方差

mean, var = np.mean(data), np.var(data)

print(mean, var)

# 在var附近找100个点,

var_range = np.linspace(max(var - 4, 0.1), var + 4.0, 100)

# 计算这些点的概率密度,由于使用了广播

# p是一个二维数组,第0轴对应var_range的各个方差,第一轴对应data的每个元素

p = normal_pdf(mean, var_range[:, None], data)

print(p)

# 极大似然函数的值

# 沿着p的第1轴求所有概率的乘积

p = np.product(p, axis=1)

print(p)

# 画出极大似然函数

pl.plot(var_range, p)

# 画出平行于y轴的竖线

pl.axvline(var, 0, 1, c='r')

pl.show()

0818b9ca8b590ca3270a3433284dd417.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值