文章代码下载
目标
#生成10名同学,5门功课的数据
score=np.random.randint(40, 100,(10, 5))
#取出最后4同学的成绩,用于逻辑判断
test_score=score[6:,0:5]
#逻辑判断,如果成绩大于60就标记为True否则为 False
test_score >60
#B00L赋值,将满足条件的设置为指定的值-布尔索引
test_score[test_score > 60] = 1
test_score
#判断前两名同学的成绩[0:2,:1是否全及格
np.all(score[0:2,:]>60)
#判断前两名同学的成绩[0:2,:]是否有大于90分的
np.any( score[0:2,:]>80)
通过使用 np. where能够进行更加复杂的运算
#判断前四名学生,前四门课程中,成绩中大于60的置为1,否则为0
temp=score[: 4,: 4]
np.where(temp > 60, 1, 0)
#判断前四名学生,前四门课程中,成绩中大于60且小于90的换为1,否则为0
np.where(np.logical_and(temp >60, temp<90),1, 0)
array([[1, 0, 0, 0],
[1, 1, 1, 1],
[0, 0, 0, 0],
[0, 1, 1, 0]])
#判断前四名学生,前四门课程中,成绩中大于90或小于60的换为1,否则为0
np.where(np.logical_or(temp > 90, temp<60),1, 0)
array([[0, 1, 1, 1],
[0, 0, 0, 0],
[1, 1, 0, 0],
[1, 0, 0, 1]])
在数据挖掘/机器学习领域,统计指标的值也是我们分析问题的一种方式。常用的指标如下:
进行统计的时候,axis轴的取值并不一定,Numpy中不同的API轴的值都不一样,在这里,axis 0代表列,axis 1代表行去进行统计
#接下来对于前四名学生,进行一些统计运算
#指定列去统计
temp=score[:4,0:5]
print("前四名学生,各科成绩的最大分:{}".format(np.max(temp,axis=0)))
print("前四名学生,各科成绩的最小分:{}".format(np.min(temp,axis=0)))
print("前四名学生,各科成绩波动情况:{}".format(np.std(temp,axis=0)))
print("前四名学生,各科成绩的平均分:{}".format(np.mean(temp,axis=0)))
结果:
前四名学生,各科成绩的最大分:[96 85 91 96 92]
前四名学生,各科成绩的最小分:[42 43 66 42 40]
前四名学生,各科成绩波动情况:[20.26542622 16.97608612 10.5 20.96872671 18.62793601]
前四名学生,各科成绩的平均分:[73.25 59.25 80.5 76.75 67. ]
如果需要统计出某科最高分对应的是哪个同学?
print("前四名学生,各科成绩最高分对应的学生下标:{}".format(np.argmax(temp,axis=0)))
结果:
前四名学生,各科成绩最高分对应的学生下标:[3 3 0 3 0]
目标
arr=np.array([[1,2,3,2,1,4],[5,6,1,2,3,11])
arr+1
arr/2
#可以对比python列表的运算,看出区别
a=[1,2,3,4,5]
a*3
arr1=np.array([[1,2,3,2,1,4],[5,6,1,2,3,1]])
arr2=np.array([[1,2,3,4],[3,4,5,6]])
上面这个能进行运算吗,结果是不行的!
-
数组在进行矢量化运算的,要求数组的形状是相等的.当形状不相等的数组执行算术运算的时候,就会出现广播机制,该机制会对数组进行扩展,使数组的shape属性值一样,这样,就可以进行矢量化运算了.下面通过一个例子进行说明:
arr1=np.array([[0],[1],[2],[3]])
arr1.shape
#(4,1)
arr2=np.array([1,2,3])
arr2.shape
#(3,)arrl+arr2
#结果是:
array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
上述代码中,数组arr1是4行1列,arr2是1行3列.这两个数组要进行相加,按照广播机制会对数组arr1和arr2都进行扩展,使得数组ar1和ar2都变成4行3列.
下面通过一张图来描述广播机制扩展数组的过程:
广播机制实现了时两个或两个以上数组的运算,即使这些数组的shape不是完全相同的,只需要满足如下任意一个条件即可。
广播机制需要扩展维度小的数组,使得它与维度最大的数组的shape值相同,以便使用元素级函数或者运算符进行运算。
如果是下面这样,则不匹配:
A(1d array):10
B(1d array):12
A(2d array):2×1
B(3d array):8×4×3
点个赞吧!!!你的鼓励是对我码字的认可