利用 Python 进行数据分析实验(三)

2023-12-14 19:38:40

一、实验目的

使用Python解决简单问题

二、实验要求

自主编写并运行代码,按照模板要求撰写实验报告

三、实验步骤

本次实验共有4题:

  1. 自行给定一个从小到大排好序的数组,输入一个数并将其插入到原始数组中,新的数组还是满足从小到大的排列顺序
  2. 随机生成两个4*4的矩阵X和Y,要求用for循环取出X,Y矩阵对应位置的值,将其相减后放入新的矩阵Z中
  3. 随机输入一个矩阵,求它的逆矩阵并验证猜数字游戏,随机生成一个数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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。