利用 Python 进行数据分析实验(三)
2023-12-14 19:38:40
一、实验目的
使用Python解决简单问题
二、实验要求
自主编写并运行代码,按照模板要求撰写实验报告
三、实验步骤
本次实验共有4题:
- 自行给定一个从小到大排好序的数组,输入一个数并将其插入到原始数组中,新的数组还是满足从小到大的排列顺序
- 随机生成两个4*4的矩阵X和Y,要求用for循环取出X,Y矩阵对应位置的值,将其相减后放入新的矩阵Z中
- 随机输入一个矩阵,求它的逆矩阵并验证猜数字游戏,随机生成一个数x(1<x<10000),玩家每次输入一个数y,如果y大于或小于x,则给出相应提示,如y=x则表示数字猜对了。
四、实验结果
T1
"""
自行给定一个从小到大排好序的数组
输入一个数并将其插入到原始数组中
新的数组还是满足从小到大的排列顺序
"""
import random
length = random.randint(5, 10) # 生成数组的长度
arr = []
for i in range(0, length):
arr.append(random.randint(-100, 100))
arr = sorted(arr)
print('原数组如下:' + str(arr))
print("请输入一个数:")
num = int(input())
arr.append(num)
arr = sorted(arr)
print('重新排序后:' + str(arr))
T2
"""
随机生成两个4*4的矩阵X和Y
要求用for循环取出X,Y矩阵对应位置的值
将其相减后放入新的矩阵Z中
"""
import random
import numpy as np
x = np.zeros(shape=(4, 4))
y = np.zeros(shape=(4, 4))
for i in range(0, 4):
for j in range(0, 4):
x[i][j] = random.randint(-100, 100)
y[i][j] = random.randint(-100, 100)
print('随机数组x:')
print(x)
print('随机数组y:')
print(y)
# 等价于矩阵相减,此处使用for循环
z = np.zeros(shape=(4, 4))
for i in range(0, 4):
for j in range(0, 4):
z[i][j] = x[i][j] - y[i][j]
print('x - y = ')
print(z)
T3
按照实验要求,本题测试应该使用随机的矩阵(code 3实现)。但是逆矩阵各数值可能是无理数,且由于浮点数的精度问题,导致求出的逆矩阵各数值只是“近似”,进而导致验证出现问题,求解正确的逆矩阵被判定为求解错误.
故使使用一个相对特殊的情况进行求解(code 3-1实现)
"""
Code 3
随机输入一个矩阵,求它的逆矩阵并验证
遇到精度问题
"""
import random
import numpy as np
line = random.randint(2, 10)
row = line # 方阵才有逆
x = np.random.randint(-100, 100, (line, row))
"""
按照实验要求应该使用由随机数生成的矩阵
但是由于浮点数的精度问题,且逆矩阵各数值可能是无理数
所以导致求出的逆矩阵各数值只是“近似”
进而导致验证出现问题
"""
print('原矩阵:')
print(x)
inv = np.matrix(np.linalg.inv(x))
print('原矩阵的逆:')
print(inv)
res = np.matrix(x) * inv
print(res)
"""
Code 3-1
随机输入一个矩阵,求它的逆矩阵并验证
"""
import numpy as np
print('请输入方阵大小:')
size = int(input())
s = ''
irr = 0
for i in range(0, int(size)):
s = s + input()
mat = np.zeros(shape=(size, size))
for i in range(0, len(s)):
mat[int(irr / size)][irr % size] = s[irr]
irr = irr + 1
inv = np.matrix(np.linalg.inv(mat))
res = mat * inv
print(inv)
print(res)
T4
"""
猜数字游戏,随机生成一个数x(1<x<10000),玩家每次输入一个数y
如果y大于或小于x,则给出相应提示,如y=x则表示数字猜对了。
"""
import random
x = random.randint(1, 10000)
def check(flag):
if int(flag) > int(x):
bigger()
return False
elif int(flag) < int(x):
smaller()
return False
else:
print('Congratulations!')
return True
def bigger():
print('too big')
def smaller():
print('too small')
while True:
y = input()
if check(y):
exit(0)
五、实验体会
查询资料,显示Python中使用双精度浮点数来存储小数,8字节64位存储空间分配了52位来存储浮点数的有效数字,11位存储指数,1位存储正负号(本质上是二进制表示的科学计数法),舍入(round)的规则为“0 舍 1 入”。
如果需要更高精度,可以使用类型Decimal并使用decimal.Decimal() 来存储精确的数字。或者使用Fraction模块来表示分数进行运算。
文章来源:https://blog.csdn.net/qq_44458671/article/details/134862941
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!