人工智能概论:作业五 numpy实验

第一题:画出指定柱状图

import matplotlib.pyplot as plt

year = [2001, 2002, 2003, 2004, 2005, 2006]
unit = [50, 60, 75, 45, 70, 105]

p1 = plt.bar(year, unit, )
plt.title('Bar Chart')
plt.xlabel('Year')
plt.ylabel('Unit')
plt.bar_label(p1, label_type='edge')
image-20221101194721662

第二题

使用np.random.random创建一个10*10的ndarray对象,并打印出最大最小元素,按行排序,从左到右依次增大

import numpy as np

np.random.seed(64)
arr = np.random.random((10, 10))
print("Max:", np.max(arr), "Min:", np.min(arr))

arr_sorted = np.sort(arr, axis=1)
print(arr_sorted)
image-20221101195436111

第三题

使用numpy模块,生成一个ndarray对象,其内容为array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]),并实现分别在行和列上扩充一行和一列,扩充的内容是[7,8,9],分别赋值给变量b和c。请写出完整的相应的python代码。

arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
b = np.concatenate((arr, np.array([[7, 8, 9]])))
c = np.concatenate((arr, np.array([[7, 8, 9]]).T), axis=1)

print(b)
print(c)
image-20221101195911147

第四题

按照要求,写一段代码完成相应的要求

  1. 数组ar1表示在【0—19】这20个数字中分成4行5列
  2. 随机产生一个4行5列的矩阵ar2,随机数的取值为(0,1)
  3. 取出ar1矩阵中第3行中第1-4之间(都包含)的数
  4. 将ar1矩阵和ar2的转置进行矩阵相乘,求出结果ar3
  5. 对ar3的每一行进行排序
  6. 对ar3进行直方图统计,统计的区间为【0.,30.,50.,80.,100.】,统计该区间的个数
  7. 对ar1和ar2按照列进行拼接得到ar4
# 数组ar1表示在【0—19】这20个数字中分成4行5列
ar1 = np.arange(0, 20).reshape(4, 5)
print("1:ar1\n", ar1)
# 随机产生一个4行5列的矩阵ar2,随机数的取值为(0,1)
ar2 = np.random.random((4, 5))
print("2:ar2\n", ar2)
# 取出ar1矩阵中第3行中第1-4之间(都包含)的数
print("3:ar1矩阵中第3行中第1-4之间的数\n", ar1[3, 1:5])
# 将ar1矩阵和ar2的转置进行矩阵相乘,求出结果ar3
ar3 = np.dot(ar1, ar2.T)
print("4:ar3\n", ar3)
# 对ar3的每一行进行排序
ar3_sorted = np.sort(ar3, axis=1)
print("5:ar3_sorted\n", ar3_sorted)
# 对ar3进行直方图统计,统计的区间为【0.,30.,50.,80.,100.】,统计该区间的个数
number_list = [np.sum(0 <= ar3), np.sum(30 <= ar3), np.sum(50 <= ar3), np.sum(80 <= ar3), np.sum(100 <= ar3), 0]
plt.bar(['0~30', '30~50', '50~80', '80~100', '100~'], [number_list[i] - number_list[i+1] for i in range(len(number_list)-1)])
# 对ar1和ar2按照进行拼接得到ar4
ar4 = np.concatenate((ar1, ar2))
print("7:ar4\n", ar4)
image-20221101203015043 image-20221101203024203