python作业07

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21

1

打印输出numpy的版本和配置信息

1
2
3
4
5
6
7
8
import numpy as np

# 打印NumPy版本
print("NumPy 版本:", np.__version__)

# 打印NumPy配置信息
print("NumPy 配置:")
print(np.show_config())

image-20231019130033173

2

创建一个长度为10的空向量

1
2
3
import numpy as np
n = np.zeros(10)
print(n)

image-20231019130124311

np.zeros(n) 创建一个长度为n全为0的一维数组

3

查阅数组的内存大小

1
2
3
import numpy as np
n = np.zeros(10)
print(n.size)

image-20231019130246789

4

反转一个向量(第一个元素变为最后一个)

1
2
3
import numpy as np
n = np.array([1,2,3,4,5])
print(n[::-1])

image-20231019130349569

n[::-1]表示步长为-1,即逆序输出

5

创建一个 10x10 的随机数组并找到它的最大值和最小值

1
2
3
4
import numpy as np
n = np.random.randn(10,10)
print("the min number is {}".format(n.min()))
print("the max number is {}".format(n.max()))

image-20231019130956239

np.random.randn(10,10)生成一个10x10的具有正态分布的二维数组

6

对一个5x5的随机矩阵做归一化

1
2
3
import numpy as np
n =np.random.randn(5,5)
print((n-n.min())/(n.max()-n.min()))

image-20231019131456227

归一化一般是将数据映射到指定的范围,用于去除不同维度数据的量纲以及量纲单位。

常见的映射范围有 [0, 1] 和 [-1, 1] ,最常见的归一化方法就是 Min-Max 归一化。

7

用5种不同的方法提取随机数组中的整数部分

1
2
3
4
5
6
7
import numpy as np
Z = np.random.uniform(0,10,10)
print (Z - Z % 1) #减去数字的小数部分
print (np.floor(Z)) # 返回不大于输入参数的最大整数。(向下取整)
print (np.ceil(Z)-1) # np.ceil() : 计算各元素的ceiling,对元素向上取整。
print (Z.astype(int)) # 将Z的数据类型转换为int
print (np.trunc(Z)) # 截取整数部分

image-20231019132328957

8

创建一个大小为10的随机向量,并把它排序

1
2
3
4
import numpy as np
z =np.random.random(10)
z.sort()
print(z)

image-20231019132420505

9

将一个10x2的笛卡尔坐标矩阵转换为极坐标

1
2
3
4
5
6
7
import numpy as np
z = np.random.random((10,2))
x,y=z[:,0],z[:,1]
r=np.sqrt(x**2+y**2)
t=np.arctan2(y,x)
print(r)
print(t)

image-20231019133242392

10

创建一个大小为10的随机向量并且将该向量中最大的值替换为0

1
2
3
4
import numpy as np
Z = np.random.random(10)
Z[Z.argmax()] = 0
print(Z)

image-20231019133721208

numpy.argmax(a, axis=None, out=None)
返回沿轴axis最大值的索引。

11

创建一个结构化数组,其中x和y坐标覆盖[0, 1]x[1, 0]区域

1
2
3
4
import numpy as np
Z = np.zeros((5, 5), [('x', float), ('y', float)])
Z['x'], Z['y'] = np.meshgrid(np.linspace(0, 1, 5), np.linspace(0,1, 5))
print (Z)

image-20231019133828899

12

给定两个数组X和Y,构造柯西(Cauchy)矩阵C ()

1
2
3
4
5
6
import numpy as np
X = np.arange(8)
Y = X + 0.5
C = 1.0 / np.subtract.outer(X, Y)
print (C)
print(np.linalg.det(C))

image-20231019134122412

13

(100, 2)的随机向量,求出点与点之间的距离

1
2
3
4
5
import numpy as np
Z = np.random.random((100, 2)) # 生成一个100x2的随机数组
X, Y = np.atleast_2d(Z[:, 0], Z[:, 1]) # Z[:,0]表示所有行中第0列,Z[:,1]表示所有行中第一列元素
D = np.sqrt((X-X.T)**2 + (Y-Y.T)**2)
print (D)

image-20231019134810335

numpy.atleast_2d(*arys) 将输入视为具有至少两个维度的数组。

14

构造一个二维高斯矩阵

1
2
3
4
5
6
import numpy as np
X, Y = np.meshgrid(np.linspace(-1, 1, 10), np.linspace(-1, 1, 10))
D = np.sqrt(X**2 + Y**2)
sigma, mu = 1.0, 0.0
G = np.exp(-( (D-mu)**2 / (2.0*sigma**2) ))
print (G)

image-20231019135209835

15

给定一个向量,在第二个向量索引的每个元素上加1(注意重复索引)

1
2
3
4
5
6
7
import numpy as np
Z = np.ones(10)
I = np.random.randint(0,len(Z),20)
Z += np.bincount(I, minlength=len(Z))#统计每个数出现的次数,数组最小长度为 len(Z)
print(Z)
np.add.at(Z, I, 1)#在Z中的第 i位加一
print(Z)

image-20231019140027949

16

思考如何求一个四维数组最后两个轴的数据和

1
2
3
4
import numpy as np
A = np.random.randint(0,10,(3,4,3,4)) #四维随机整数
sum = A.sum(axis=(-2,-1)) # axis代表第几轴,负数为倒数第i轴
print(sum)

image-20231019140534009

17

通过滑动窗口计算一个数组的平均数

1
2
3
4
5
6
7
import numpy as np
def moving_average(a, n=3) :
ret = np.cumsum(a, dtype=float)
ret[n:] = ret[n:] - ret[:-n]
return ret[n - 1:]/n
Z = np.arange(20)
print(moving_average(Z, n=3))

image-20231019140910877

18

找出数组中出现频率最高的值

1
2
3
4
import numpy as np
Z = np.random.randint(0,10,50)#生成50个0~10的随机整数
print (Z)
print(np.bincount(Z).argmax())#统计数字出现频率,并返回频率最高对应的值

image-20231019144512305

19

从一个10x10的矩阵中提取出连续的3x3区块

1
2
3
4
5
6
7
8
import numpy as np
from numpy.lib import stride_tricks
Z = np.random.randint(0,5,(10,10))
n = 3
i = 1 + (Z.shape[0]-3)
j = 1 + (Z.shape[1]-3)
C = stride_tricks.as_strided(Z, shape=(i, j, n, n),strides=Z.strides + Z.strides)
print(C)

image-20231019144601915

20

利用numpy数组实现Game of life https://www.zhihu.com/topic/19649581/hot

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import numpy as np
def iterate(Z):
# Count neighbours
N = (Z[0:-2, 0:-2] + Z[0:-2, 1:-1] + Z[0:-2, 2:] +
Z[1:-1, 0:-2] + Z[1:-1, 2:] +
Z[2:, 0:-2] + Z[2:, 1:-1] + Z[2:, 2:])
# Apply rules
birth = (N == 3) & (Z[1:-1, 1:-1] == 0)
survive = ((N == 2) | (N == 3)) & (Z[1:-1, 1:-1] == 1)
Z[...] = 0
Z[1:-1, 1:-1][birth | survive] = 1
return Z


Z = np.random.randint(0, 2, (50, 50))
for i in range(100): Z = iterate(Z)
print(Z)

image-20231019144655921

21

用NumPy回归出上海3月份Covid-19阳性病例的趋势 数据参考:https://blog.csdn.net/huwp001/article/details/123841481

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np
from numpy import polyfit as pf
import matplotlib.pyplot as plt
x=np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])
y =np.array([83,65,169,138,202,158,260,374,509,758,896,981,983,1609,2269,2676,3500,4477,5656])
#本题为求指数回归方程,先取对数求线性回归方程,在求指数回归方程
# y=e^(ax+b)
# log(y)= ax+b
log_y=np.log(y)
co=pf(x,log_y,1)# 求线性回归方程
a,b=co[0],co[1]
z = np.exp(b) * np.exp(a * x) #线性回归方程对应的点求指数后的预测值
plt.plot(x, y, "o")#散点图
plt.plot(x, z)#拟合曲线
plt.show()

image-20231019144754326

对指数回归方程的 y 求对数,转化为线性回归方程,然后使用线性回归方程求出x对应的预测值, 最后使用 matplotlib 库画出回归曲线


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论