Numpy---ndarray运算(逻辑运算、统计运算)

1. 逻辑运算

直接进行大于、小于的判断;合适之后,可以直接进行赋值。

# 生成10名同学,5门功课的数据
score = np.random.randint(40, 100, (10, 5))
# 取出最后4名同学的成绩,用于逻辑判断
test_score = score[6:, 0:5]
# 逻辑判断, 如果成绩大于60就标记为True 否则为False
test_score > 60
array([[ True, True, True, False, True],
[ True, True, True, False, True],
[ True, True, False, False, True],
[False, True, True, True, True]])
# BOOL赋值, 将满足条件的设置为指定的值-布尔索引
test_score[test_score > 60] = 1
test_score
array([[ 1, 1, 1, 52, 1],
[ 1, 1, 1, 59, 1],
[ 1, 1, 44, 44, 1],
[59, 1, 1, 1, 1]])

通用判断函数:

np.all()

# 判断前两名同学的成绩[0:2, :]是否全及格
np.all(score[0:2, :] > 60)
False

np.any()

# 判断前两名同学的成绩[0:2, :]是否有大于90分的
np.any(score[0:2, :] > 80)
True

np.where(三元运算符):

# 判断前四名学生,前四门课程中,成绩中大于60的置为1,否则为0
temp = score[:4, :4]
np.where(temp > 60, 1, 0)

复合逻辑需要结合np.logical_and和np.logical_or使用:

# 判断前四名学生,前四门课程中,成绩中大于60且小于90的换为1,否则为0
np.where(np.logical_and(temp > 60, temp < 90), 1, 0)
# 判断前四名学生,前四门课程中,成绩中大于90或小于60的换为1,否则为0
np.where(np.logical_or(temp > 90, temp < 60), 1, 0)

2. 统计运算

求和np.sum

n = np.arange(10)
np.sum(n)
# axis=0 : 表式每一列的多行求和
np.sum(n, axis=0)
# axis=1 : 表式每一行中的多列求和
np.sum(n, axis=1)

其他常见聚合函数:
- np.min  最小值
- np.max  最大值
- np.mean  平均值
- np.average  平均值
- np.median  中位数
- np.percentile  百分位数
- np.argmin  最小值对应的下标
- np.argmax  最大值对应的下标
- np.std  标准差
- np.var  方差
- np.power  次方,求幂
- np.argwhere  按条件查找

np.max(n)  # 最大值
np.min(n)  # 最小值
np.mean(n)  # 平均值
np.average(n)  # 平均值
np.median(n)  # 中位数
np.percentile(n, q=50)  # 百分位数, q=50表式中位数
n = n.reshape(-1)
display(n)
np.argmax(n)  # 第一个最大值对应的下标
np.argmin(n)  # 第一个最小值对应的下标
np.argwhere(n==np.max(n))  # 按条件找到所有最大值的下标
np.power(n, 3)  # 次方
# n ** 3
np.std(n)  # 标准差
np.var(n)  # 方差

np.sum 和 np.nansum(nan: not a number)

nan : 数值类型,not a number :不是一个正常的数值,表式空

np.nan : float类型

n = np.array([1, 2, 3, np.nan])
np.sum(n)  # 无法求出和
np.nansum(n)  # 排除掉nan之后,剩下的数的和

学生成绩统计运算,进行统计的时候,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 97 72 98 89]
前四名学生,各科成绩的最小分:[55 57 45 76 77]
前四名学生,各科成绩波动情况:[16.25576821 14.92271758 10.40432602 8.0311892 4.32290412]
前四名学生,各科成绩的平均分:[78.5 75.75 62.5 85. 82.25]
如果需要统计出某科最高分对应的是哪个同学?
# np.argmax(temp, axis=)
# np.argmin(temp, axis=)
print("前四名学生,各科成绩最高分对应的学生下标:{}".format(np.argmax(temp, axis=0)))

前四名学生,各科成绩最高分对应的学生下标:[0 2 0 0 1]

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三月七꧁ ꧂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值