实验02 Numpy创建数组
实验学时:2学时
实验类型:验证
实验要求:必修
一、实验目的
- 掌握Numpy创建数组的方法
- 掌握Numpy ndarray的属性、运算
- 掌握Numpy迭代数值,修改数组中元素的值
- 掌握Numpy常用函数的使用方法
二、实验要求
使用Numpy.array的构造函数创建数组,学会使用Numpy ndarray的属性、运算,掌握Numpy迭代数值,修改数组中元素的值等常用操作。
三、实验内容
任务1. (1)创建一个元素为10到50的10个随机整数的ndarray对象。
(2)创建一个范围在(0,1)之间的长度为6的等差数列。
用Python与第三方库numpy编写程序实现。
任务2. (1)创建一个每一行都是从0到4的55矩阵。
(2)创建一个88的ndarray对象,且矩阵边界全为5,里面主对角线为1,其余为0的矩阵。
(3)创建一个平均值为70,标准差为5的43个同学的Python语言程序设计成绩的随机分数。
用Python与第三方库numpy编写程序实现。
任务3. (1)为43个同学随机生成5门课程的成绩(分数在1~100之间)。
(2)求第2门课程的平均分(mean函数)和第8个同学的总分(sum函数)。
(3)统计第3门课程不及格的人数(len函数)。
用Python与第三方库numpy编写程序实现。
任务4. 某人走了2000步(每步0.5米),向前走了一步记为1,向后走一步记为-1,当计算距原点的距离时,就是将所有的步数进行累计求和。用Python与第三方库numpy编写程序实现。
任务5. 从一个10行10列的矩阵中提取出连续的3行3列区块。用Python与第三方库numpy编写程序实现。(提示:使用np.lib.stride_tricks.as_strided()是矩阵分块函数)
任务6. 绘制曼德勃罗花。用Python与第三方库numpy编写程序实现。
参考源代码:
课外练习:
任务7. 一万人参与厦门市政府组织的万人博饼庆中秋活动,每人只能博一次。用numpy分析博得状元的概率。用Python与第三方库numpy编写程序实现。
test2.py
import numpy as np
import matplotlib.pyplot as plt
def task1():
# 创建一个元素为10到50的10个随机整数的ndarray对象
arr1 = np.random.randint(10, 51, 10)
# 创建一个范围在(0,1)之间的长度为6的等差数列
arr2 = np.linspace(0, 1, 6)
print("随机整数数组:", arr1)
print("等差数列数组:", arr2)
def task2():
# 创建一个每一行都是从0到4的5*5矩阵
matrix1 = np.tile(np.arange(5), (5, 1))
# 创建一个8*8的ndarray对象,且矩阵边界全为5,里面主对角线为1,其余为0的矩阵
matrix2 = np.zeros((8, 8))
matrix2[0, :] = matrix2[:, 0] = matrix2[-1, :] = matrix2[:, -1] = 5
np.fill_diagonal(matrix2, 1)
# 创建一个平均值为70,标准差为5的43个同学的Python语言程序设计成绩的随机分数
scores = np.random.normal(70, 5, 43)
print("矩阵1:\n", matrix1)
print("矩阵2:\n", matrix2)
print("随机分数:", scores)
def task3():
# 为43个同学随机生成5门课程的成绩(分数在1~100之间)
np.random.seed(0)
grades = np.random.randint(1, 101, (43, 5))
# 求第2门课程的平均分和第8个同学的总分
mean_grade = np.mean(grades[:, 1])
total_grade = np.sum(grades[7, :])
# 统计第3门课程不及格的人数
failed_count = len(grades[grades[:, 2] < 60])
print("成绩矩阵:\n", grades)
print("第2门课程的平均分:", mean_grade)
print("第8个同学的总分:", total_grade)
print("第3门课程不及格的人数:", failed_count)
def task4():
steps = np.array([1, -1])
walk = np.random.choice(steps, 2000)
distance = np.sum(walk) * 0.5
print("距离原点的距离:", distance)
def task5():
# 创建一个10行10列的矩阵
matrix = np.arange(100).reshape(10, 10)
# 提取连续的3行3列区块
blocks = np.lib.stride_tricks.as_strided(matrix, shape=(8, 8, 3, 3), strides=matrix.strides + matrix.strides)
print("矩阵:\n", matrix)
print("连续的3行3列区块:\n", blocks)
def task6():
def mandelbrot(c, max_iter):
z = c
for i in range(max_iter):
if abs(z) > 2:
return i
z = z * z + c
return max_iter
def mandelbrot_set(xmin, xmax, ymin, ymax, width, height, max_iter):
r1 = np.linspace(xmin, xmax, width)
r2 = np.linspace(ymin, ymax, height)
return (r1, r2, np.array([[mandelbrot(complex(r, i), max_iter) for r in r1] for i in r2]))
# 设置绘图参数
xmin, xmax, ymin, ymax = -2.0, 1.0, -1.5, 1.5
width, height = 1000, 1000
max_iter = 256
# 生成曼德勃罗集合数据
x, y, m_set = mandelbrot_set(xmin, xmax, ymin, ymax, width, height, max_iter)
# 绘制曼德勃罗花图像
plt.figure(figsize=(10, 10))
plt.imshow(m_set.T, extent=(xmin, xmax, ymin, ymax), cmap='hot')
plt.xlabel('Re')
plt.ylabel('Im')
plt.title('Mandelbrot Set')
plt.show()
def task7():
np.random.seed(0)
# 模拟一万人的博饼结果
rolls = np.random.choice(6, (10000, 4)) + 1
# 计算每一次博饼是否获得状元
is_champion = np.sum(rolls == 6, axis=1) == 4
# 计算获得状元的概率
champion_probability = np.mean(is_champion)
print("获得状元的概率:", champion_probability)
if __name__ == '__main__':
task1()
task2()
task3()
task4()
task5()
task6()
task7()
标签:02,10,创建,矩阵,print,可视化,np,Numpy
From: https://www.cnblogs.com/IvanKK/p/17936719