1.实验目的
①掌握NumPy科学计算库的语法规则;
②能够运用NumPy完成多维数组和矩阵运算。
2.实验内容
根据要求,编写程序,运用NumPy完成多维数组和矩阵运算。
3. 实验过程
题目一:
生成一个[0,1)之间均匀分布的随机数数组,包含1000个元素, 随机种子为612。接收用户输入一个1-100之间的数字。打印随机数组中所有索引值可以被输入整数整除的数字,并打印序号和索引值。序号从1开始,依次加1。
程序运行示例:
提示:输出时可以使用制表符"\t",对齐各列。
代码实现
import numpy as np
np.random.seed(612) #指定随机种子612
arr = np.random.rand(1000) #随机生成1-1000的随机数
num = int(input("请输入一个1-100之间的数字"))
index = 1 #序号
print("序号"'\t\t'"索引值" '\t\t\t' "随机数")
if num >= 1 and num <= 100:
for i in range(1000):
if i % num == 0:
print(index,'\t\t',i,'\t\t',arr[i])
index += 1
else:
print("输入错误,请重新输入")
题目二
代码
import numpy as np
x = np.array([64.3,99.6,145.45,63.75,135.46,92.85,86.97,144.76,59.3,116.03])
y = np.array([62.55,82.42,132.62,73.31,131.05,86.57,85.49,127.44,55.25,104.84])
#求出x和y的平均值
average_x = np.average(x)
average_y = np.average(y)
n = x.size
def w():
sum1 = 0
sum2 = 0
for i in range (n):
sum1 += (x[i] * average_x) * (y[i] * average_y)
sum2 += (x[i] * average_x) ** 2
return sum1 / sum2
def b():
return average_y - w() * average_x
print("W的值为",w())
print("b的值为",b())
题目三
代码
import numpy as np
x0 = np.ones(10)
x1 = np.array([64.3,99.6,145.45,63.75,135.46,92.85,86.97,144.76,59.3,116.03])
x2 = np.array([2,3,4,2,3,4,2,4,1,3])
y = np.array([62.55,82.42,132.62,73.31,131.05,86.57,85.49,127.44,55.25,104.84])
x= np.stack((x0,x1,x2),axis=1)
print("x:",x)
y = np.vstack(y)
print("y:",y)
x = np.mat(x)
y = np.mat(y)
w = np.linalg.inv(np.transpose(x) * x) * np.transpose(x) * y
print("w:",w)
print("w的shape",w.shape)
题目四(选做):
请创建随机数组,并完成以下要求:
(1) 创建一个4×4的随机数组,数组元素为1-100之间的整数;输出该数组中的所有元素。
(2) 取出数组中每行的最小值,以及每列的最大值。
(3) 输入数字n,输出数组中行索引为n的一行元素。
(4) 输入数字m、n,输出列索引从m到n的元素,组成一个新数组。
4. 实验小结&讨论题
① 实验过程中遇到了哪些问题,你是如何解决的?
答:软件使用不熟练。
② 在使用NumPy进行多个矩阵连续运算时,有几种方法?需要注意什么?(可自主查阅资料进行补充)
答:矩阵相加运算、矩阵的点乘运算、矩阵的索引操作。两个矩阵相加,需要满足以下至少一个条件:两个矩阵的行数和列数是相等的,其中一个矩阵的行数或者列数是1;索引操作取矩阵某一行元素:行对应位置取对应的行,列对应位置,使用冒号,或者不写、取矩阵某一列元素:行对应位置使用冒号,列对应位置取对应的列。