1.完善函数fun1,参数data是一个整型列表,将data中为偶数的数字抽取出来,并存入到一个数组中。 必须使用Numpy,返回结果为Numpy的ndarray类型。
def fun1(data=[1,2,3,4,5,6,7,8,9,10]):
"""
Arg:
data : a list as input; e.g. [1,2,3,4,5,6,7,8,9,10]
return a Numpy ndarray; e.g. [ 2 4 6 8 10]
"""
temp=np.array(data)
ou=np.where(temp%2==0)
return temp[ou]
2.完善函数fun2,参数data是一个整型列表,把data中小于5的数据替换为1,剩余数据替换为20。 必须使用Numpy,返回结果为Numpy的ndarray类型。
提示:np.where(condition, x, y)
def fun2(data=[9,2,6,4,2,6,7,8,2,10] ):
"""
Arg:
data : a list as input; e.g. [9,2,6,4,2,6,7,8,2,10]
return a Numpy ndarray; e.g. [20 1 20 1 1 20 20 20 1 20]
"""
temp=np.array(data)
ans=np.where(temp<5,1,20)
return ans
3.完善函数fun3,参数data是一个列表(可能有多维),num是一个数字,返回data中与num差值最大的数。 (提示: np.abs, argmax, flat)
def fun3(data=[1,2,3,4,5,6,7],num=5):
"""
Arg:
data : a list as input; e.g. [1,2,3,4,5,6,7]
return a number; e.g. 1
"""
temp=np.array(data)
ping=np.array(list(temp.flat))
cha=np.abs(ping-num)
ans=np.argmax(cha)
return temp.flat[ans]
4.将a,b两个列表改为ndarray类型,并进行连接。连接时,让维度小的数据在前,维度大的数据在后。将维度小的数组进行调整,使其与维度大的数组的数组的shape相同,然后按维度较大数据的最后一个维度进行连接,返回连接后的ndarray。如果不能连接,返回空数组np.array([])
提示:np.concatenate
def fun4(a,b):
'''
eg.a=[3,3,3],b=[[1,2,3],[4,5,6],[7,8,9]]
return a np.array e.g. [[3 3 3 1 2 3]
[3 3 3 4 5 6]
[3 3 3 7 8 9]]
'''
a1=np.array(a)
b1=np.array(b)
if a1.ndim>b1.ndim:
a1,b1=b1,a1
try:
a2=a1+np.zeros_like(b1)
return np.concatenate((a2,b1),axis=b1.ndim-1)
except:
return np.array([])
5.将列表a转换为array,并在指定维度ax的位置p插入x.(p为数字或与维度对应的列表)并返回。禁止用循环。
def fun5(a,p,x,ax):
'''You need to convert the list to ndarray and insert p at position x.
eg.a=[[1,1,1],[2,2,2],[3,3,3]]
p=1
x=5
ax=1
return a np.array
e.g. [[1 5 1 1]
[2 5 2 2]
[3 5 3 3]]
'''
a1=np.array(a)
return np.insert(a1,p,x,axis=ax)
6.完成函数fun6,参数v是一个只有0和1的n*m矩阵,并求出其中1的个数
def fun6(v):
'''
Arg
v:a 5*5 matrix ; return the total number of 1
eg.[[0,1,1,0,1],
[0,0,1,0,1],
[0,1,1,0,0],
[1,1,1,0,1],
[1,0,1,0,1]]
return 14
'''
v1=np.array(v)
index=np.where(v1==1)
return len(v1[index])
7.完成函数fun7,参数v是一个n*m的矩阵(二维列表,每个数是0-10的整数),求出每一行中最大值与最小值差的绝对值,返回类型为Numpy数组,并返回最大的一个绝对值所在行的索引。
def fun7(v):
'''
Arg
v: a 3*3 matrix ; return the difference between the maximum and minimum of each row and number of rows with maximum difference
eg
[[3, 2, 7],
[2, 8, 4],
[9, 6, 1]]
return (array([5 6 8]), 2)
'''
diff=np.max(v,axis=1)-np.min(v,axis=1)
return (diff,int(np.where(diff==np.max(diff))[0]))
8.完成函数fun8,v是一个n*m的二维整数列表(值的范围是:0-9),找出该二维数组出现次数最多的数字。返回结果是一个numpy数组,可能包含多个数值, 包含多值的时候按顺序排列。
提示:np.bincount, np.where
def fun8(v):
"""
Arg:
v: a Two-dimensional integer list.
return a np.array include the most frequent number.
e.g. v:[[0,0,0,2,0],
[0,1,5,0,0],
[0,0,2,0,0],
[1,0,0,5,0],
[0,1,0,0,0]]
return: [0]
"""
count=np.bincount(np.array(v).ravel())
return np.where(count==max(count))[0]
9.完成函数fun9,求出列表内数据奇数总和与偶数总和的差值的绝对值。必须采用Numpy的函数。
def fun9(data):
"""
Arg:
data: a list as input; e.g. [1,2,3,4,5,6,7]
return difference; e.g. 4
"""
temp=np.array(data)
ji=np.where(temp%2!=0)
ou=np.where(temp%2==0)
return np.abs(np.sum(temp[ji])-(np.sum(temp[ou])))
10.请完善以下函数fun10,data为一个一维整数型列表,该函数能找出其中第n个最小值出现的位置。
def fun10(data,n):
"""
Arg:
data : a list and a number as input; e.g. [1,2,1,1,3,4,3,1,1,2,1,1,2],5
return a index of the target; e.g. 8
"""
temp=np.array(data)
ans=np.where(temp==np.min(temp))[0]
return ans[n-1]
11.请完善以下函数fun11,data为一个二维整数型矩阵,该函数能将二维矩阵每一行的元素都减去该行的平均值。
def fun11(data):
"""
Arg:
data : a ndarray as input; e.g. [[7,2,0],[2,1,7],[5,8,3]]
return a index of the target; e.g. [[ 4. -1. -3. ]
[-1.33333333 -2.33333333 3.66666667]
[-0.33333333 2.66666667 -2.33333333]]
"""
temp=np.array(data)
ave=np.average(temp,axis=1)
return temp-ave[:,np.newaxis]