# 引入numpy库import numpy as np
# 定义cnmda函数defcnmda(m,n):'''
创建numpy数组
参数:
m:第一维的长度
n: 第二维的长度
返回值:
ret: 一个numpy数组
'''
ret =0# 请在此添加创建多维数组的代码并赋值给ret#********** Begin *********#
x =[y for y inrange(n)]
ret = np.array([x]*m)#********** End **********#return ret
第2关 Numpy 数组的基本运算
# 引入numpy库import numpy as np
# 定义opeadd函数defopeadd(m,b,n):'''
参数:
m:是一个数组
b:是一个列表
n:是列表中的索引
你需要做的是 m+b[n]
返回值:
ret: 一个numpy数组
'''
ret =0#********** Begin *********#
ret = m+b[n]#********** End **********#return ret
# 定义opemul函数defopemul(m,b,n):'''
参数:
m:是一个数组
b:是一个列表
n:是列表中的索引
你需要做的是 m*b[n]
返回值:
ret: 一个numpy数组
'''
ret =0#********** Begin *********#
ret = m*b[n]#********** End **********#return ret
第3关 Numpy 数组的切片与索引
# 引入numpy库import numpy as np
# 定义cnmda函数defce(a,m,n):'''
参数:
a:是一个Numpy数组
m:是第m维数组的索引
n:第m维数组的前n个元素的索引
返回值:
ret: 一个numpy数组
'''
ret =0# 请在此添加切片的代码,实现找出多维数组a中第m个数组的前n个元素 并赋值给ret#********** Begin *********#
ret = a[m,:n]#********** End **********#return ret
第4关 Numpy 数组的堆叠
# 引入numpy库import numpy as np
# 定义varray函数defvarray(m,n):'''
参数:
m:是第一个数组
n:是第二个数组
返回值:
ret: 一个numpy数组
'''
ret =0# 请在此添加代码实现数组的垂直叠加并赋值给ret#********** Begin *********#
ret = np.vstack((m,n))#********** End **********#return ret
# 定义darray函数defdarray(m,n):'''
参数:
m:是第一个数组
n:是第二个数组
返回值:
ret: 一个numpy数组
'''
ret =0# 请在此添加代码实现数组的深度叠加并赋值给ret#********** Begin *********#
ret = np.dstack((m,n))#********** End **********#return ret
# 定义harray函数defharray(m,n):'''
参数:
m:是第一个数组
n:是第二个数组
返回值:
ret: 一个numpy数组
'''
ret =0# 请在此添加代码实现数组的水平叠加并赋值给ret#********** Begin *********#
ret = np.hstack((m,n))#********** End **********#return ret
第5关 Numpy 的拆分
# 引入numpy库import numpy as np
# 定义varray函数defvsarray(m,n):'''
参数:
m:是第一个数组
n:是需要拆分到的维度
返回值:
ret: 一个numpy数组
'''
ret =0# 请在此添加代码实现数组的纵向拆分并赋值给ret#********** Begin *********#
ret = np.vsplit(m,n)#********** End **********#return ret
# 定义darray函数defdsarray(m,n):'''
参数:
m:是第一个数组
n:是需要拆分到的维度
返回值:
ret: 一个numpy数组
'''
ret =0# 请在此添加代码实现数组的深度拆分并赋值给ret#********** Begin *********#
ret = np.dsplit(m,n)#********** End **********#return ret
# 定义harray函数defhsarray(m,n):'''
参数:
m:是第一个数组
n:是需要拆分到的维度
返回值:
ret: 一个numpy数组
'''
ret =0# 请在此添加代码实现数组的水平拆分并赋值给ret#********** Begin *********#
ret = np.hsplit(m,n)#********** End **********#return ret
NumPy基础及取值操作
第1关 ndarray对象
import numpy as np
defprint_ndarray(input_data):'''
实例化ndarray对象并打印
:param input_data: 测试用例,类型为字典类型
:return: None
'''#********* Begin *********#
a = np.array(input_data['data'])print(a)#********* End *********#
第2关 形状操作
import numpy as np
defreshape_ndarray(input_data):'''
将ipnut_data转换成ndarray后将其变形成一位数组并打印
:param input_data: 测试用例,类型为list
:return: None
'''#********* Begin *********#
a = np.array(input_data)
a = a.reshape((1,-1))print(a[0,])#********* End *********#
第3关 基础操作
import numpy as np
defget_answer(input_data):'''
将input_data转换成ndarray后统计每一行中最大值的位置并打印
:param input_data: 测试用例,类型为list
:return: None
'''#********* Begin *********#
a = np.array(input_data)print(a.argmax(axis=1))#********* End *********#
第4关 随机数生成
import numpy as np
defshuffle(input_data):'''
打乱input_data并返回打乱结果
:param input_data: 测试用例输入,类型为list
:return: result,类型为list
'''# 保存打乱的结果
result =[]#********* Begin *********#
result =list(np.random.choice(a=input_data,size=len(input_data),replace=False))#********* End *********#return result
第5关 索引与切片
import numpy as np
defget_roi(data, x, y, w, h):'''
提取data中左上角顶点坐标为(x, y)宽为w高为h的ROI
:param data: 二维数组,类型为ndarray
:param x: ROI左上角顶点的行索引,类型为int
:param y: ROI左上角顶点的列索引,类型为int
:param w: ROI的宽,类型为int
:param h: ROI的高,类型为int
:return: ROI,类型为ndarray
'''#********* Begin *********#
a = data[x:x+h+1,y:y+w+1]return a
#********* End *********#
NumPy 数组的高级操作
第1关 堆叠操作
import numpy as np
defget_mean(feature1, feature2):'''
将feature1和feature2横向拼接,然后统计拼接后的ndarray中每列的均值
:param feature1:待`hstack`的`ndarray`
:param feature2:待`hstack`的`ndarray`
:return:类型为`ndarray`,其中的值`hstack`后每列的均值
'''#********* Begin *********#
feature3 = np.hstack((feature1,feature2))return feature3.mean(axis =0)#********* End *********#
第2关 比较、掩码和布尔逻辑
import numpy as np
defstudent(num,input_data):
result=[]# ********* Begin *********#
a = np.array(input_data)
result = a[a > num]# ********* End *********#return result
第3关 花式索引与布尔索引
import numpy as np
defstudent(input_data):
result=[]#********* Begin *********#
d = np.array(input_data)
result = d[(d >='A')&(d <='Z')]# ********* End *********#return result
第4关 广播机制
import numpy as np
defstudent(a,b,c):
result=[]# ********* Begin *********#
a = np.array(a)
b = np.array(b)
c = np.array(c)
result = a + b + c
# ********* End *********#return result
第5关 线性代数
from numpy import linalg
import numpy as np
defstudent(input_data):'''
将输入数据筛选性别为男,再进行线性方程求解
:param input_data:类型为`list`的输入数据
:return:类型为`ndarray`
'''
result=[]# ********* Begin *********#
a = np.array(input_data)
x=[]
y=[]for i in a:if i[0]=="男":
x.append([int(i[1]),int(i[2])])
y.append([int(i[-1])])if x==[]and y==[]:return result
x=np.array(x)
y=np.array(y)
result=linalg.solve(x,y)# ********* End *********#return result
亲和性分析——商品推荐
第1关 使用 Numpy 加载文件中的数据
input_file =input()#接收要导入的文件 #********* Begin *********# import numpy as np
data_file = input_file
X = np.loadtxt(data_file,delimiter=",")print(X)#********* End *********#
第2关 处理 Numpy 加载到的数据
input_file =input()#接收要导入的文件 #********* Begin *********# import numpy as np
data_file = input_file
X = np.loadtxt(data_file,delimiter=",")
num_milk_purchases =0
num_bread_purchases =0
num_milkbread_purchases =0for sample in X:if sample[0]==1:
num_milk_purchases +=1if sample[1]==1:
num_milkbread_purchases +=1if sample[1]==1:
num_bread_purchases +=1print("{0} people bought milk".format(num_milk_purchases))print("{0} people bought bread".format(num_bread_purchases))print("{0} people bought both milk and bread".format(num_milkbread_purchases))#********* End *********#
第3关 商品推荐——计算支持度和置信度
input_file =input()#接收要导入的文件 import numpy as np
data_file = input_file
Data = np.loadtxt(data_file,delimiter=" ")from collections import defaultdict
features =["milk","bread","apple","banana","ham"]#存放商品名称
valid_rules = defaultdict(int)#存放所有的规则应验的情况
invaild_rules = defaultdict(int)#存放规则无效
num_occurances = defaultdict(int)#存放条件相同的规则数量#********* Begin *********# #-----在此补充算法计算每条规则的置信度和支持度-----# for sample in Data:for premise inrange(4):if sample[premise]==0:continue
num_occurances[premise]+=1for conclusion inrange(len(features)):if premise == conclusion:continueif sample[conclusion]==1:
valid_rules[(premise,conclusion)]+=1else:
invaild_rules[(premise,conclusion)]+=1
support = valid_rules
confidence = defaultdict(float)for premise,conclusion in valid_rules.keys():
rule =(premise,conclusion)
confidence[rule]= valid_rules[rule]/ num_occurances[premise]defprint_rule(premise,conclusion,support,confidence,features):
premise_name = features[premise]
conclusion_name = features[conclusion]print("Rule: If a person buys {0} they will also buy {1}".format(premise_name,conclusion_name))print("- Confidence: {0:.3f}".format(confidence[(premise,conclusion)]))print("- Support: {0}".format(support[(premise,conclusion)]))#********* End *********# #-----请勿删除Begin-End之外的代码框架-----#
premise =int(input())#获取条件
conclusion =int(input())#获取结论
print_rule(premise, conclusion, support, confidence, features)
第4关 商品推荐——排序找出最佳规则
input_file =input()#接收要导入的文件 import numpy as np
data_file = input_file
Data = np.loadtxt(data_file,delimiter=" ")from collections import defaultdict
features =["milk","bread","apple","banana","ham"]#存放商品名称
valid_rules = defaultdict(int)#存放所有的规则应验的情况
invaild_rules = defaultdict(int)#存放规则无效
num_occurances = defaultdict(int)#存放条件相同的规则数量 #********* Begin *********# #-----在此补充算法得到所有规则的置信度和支持度,并输出支持度最高的前5条规则-----# for sample in Data:for premise inrange(4):if sample[premise]==0:continue
num_occurances[premise]+=1for conclusion inrange(len(features)):if premise == conclusion:continueif sample[conclusion]==1:
valid_rules[(premise,conclusion)]+=1else:
invaild_rules[(premise,conclusion)]+=1
support = valid_rules
confidence = defaultdict(float)for premise,conclusion in valid_rules.keys():
rule =(premise,conclusion)
confidence[rule]= valid_rules[rule]/ num_occurances[premise]defprint_rule(premise,conclusion,support,confidence,features):
premise_name = features[premise]
conclusion_name = features[conclusion]print("Rule: If a person buys {0} they will also buy {1}".format(premise_name,conclusion_name))print("- Confidence: {0:.3f}".format(confidence[(premise,conclusion)]))print("- Support: {0}".format(support[(premise,conclusion)]))from operator import itemgetter
sorted_support =sorted(support.items(), key=itemgetter(1), reverse=True)for index inrange(5):print("Rule #{0}".format(index +1))
premise, conclusion = sorted_support[index][0]
print_rule(premise, conclusion, support, confidence, features)#********* End *********# #-----请勿删除Begin-End之外的代码框架-----#