Myluzh Blog

Python numpy ndarray运算

发布时间: 2023-7-20 文章作者: myluzh 分类名称: Python 朗读文章


0x01 逻辑运算
import numpy as np

# 生成40-100的10行5列数据
arr1 = np.random.randint(40, 100, (10, 5))
"""
#查看下arr1
arr1 Out[3]: 
array([[95, 65, 74, 76, 64],
       [95, 62, 74, 81, 59],
       [48, 93, 87, 40, 63],
       [99, 68, 57, 95, 51],
       [75, 78, 43, 50, 49],
       [75, 74, 86, 50, 98],
       [62, 61, 53, 40, 73],
       [58, 63, 99, 76, 85],
       [52, 44, 65, 77, 51],
       [90, 74, 93, 78, 46]])
"""

# 取6行开始取,每行取0-5列
arr2 = arr1[6:, 0:5]
"""
# 查看下arr2
arr2 Out[4]: 
array([[62, 61, 53, 40, 73],
       [58, 63, 99, 76, 85],
       [52, 44, 65, 77, 51],
       [90, 74, 93, 78, 46]])
# 逻辑运算,查看大于60的有哪些
arr2 > 60
Out[5]: 
array([[ True,  True, False, False,  True],
       [False,  True,  True,  True,  True],
       [False, False,  True,  True, False],
       [ True,  True,  True,  True, False]])
# 把大于60的改成1
arr2[arr2 > 60] = 1
Out[8]: 
array([[ 1,  1, 53, 40,  1],
       [58,  1,  1,  1,  1],
       [52, 44,  1,  1, 51],
       [ 1,  1,  1,  1, 46]])

"""

0x02 通用判断函数
# np.all() 判断前两名学生成绩是否及格
np.all(arr1[0:2,:] > 60)
"""
Out[11]: False
"""
# np.any() 判断前两名学生成绩中是否有大于80的
np.any(arr1[0:2,:] > 80)
"""
Out[12]: True
"""

0x03 三元运算符 np.where 
# 使用np.where 判断前4名学生成绩中,大于60置为1否则为0
temp = arr1[:4, :4]
"""
#查看temp
array([[95, 65, 74, 76],
       [95, 62, 74, 81],
       [48, 93, 87, 40],
       [99, 68, 57, 95]])
"""
np.where(temp > 60, 1, 0)
"""
array([[1, 1, 1, 1],
       [1, 1, 1, 1],
       [0, 1, 1, 0],
       [1, 1, 0, 1]])
"""

# 复合逻辑需要结合np.logical and和np.logical or使用
# 判断前四名学生,前四门课程中,成绩中大于60且小于90的换为1,否则为0
np.where(np.logical_and(temp > 60, temp < 90), 1, 0)
"""
array([[0, 1, 1, 1],
       [0, 1, 1, 1],
       [0, 0, 1, 0],
       [0, 1, 0, 0]])
"""
# 判断前四名学生,前四门课程中,成绩中大于90或小于60的换为1,否则为0
np.where(np.logical_or(temp > 90, temp < 60), 1, 0)
"""
array([[1, 0, 0, 0],
       [1, 0, 0, 0],
       [1, 1, 0, 1],
       [1, 0, 1, 1]])

"""

0x04 统计指标

在数据挖掘/机器学习领域,统计指标的值也是我们分析问题的一种方式。进行统计的时候,axis 轴的取值并不一定,Numpy中不同的API轴的值都不一样。常用的指标如下:
min(a,axis)
max(a,axis)
median(a,axis)
mean(a,axis,dtype)
std(a,axis,dtype)
var(a,axis,dtype)
# 接下来对于前四名学生,进行一些统计运算
# 指定列 去统计
temp = arr1[:4, 0:5]
"""
array([[78, 93, 57, 47, 67],
       [45, 79, 50, 68, 64],
       [66, 59, 65, 57, 99],
       [53, 68, 89, 82, 50]])
"""
print(f"前四名学生,各科成绩的最大分:{np.max(temp, axis=0)}")  # 前四名学生,各科成绩的最大分:[78 93 89 82 99]
print(f"前四名学生,各科成绩的最小分:{np.min(temp, axis=0)}")  # 前四名学生,各科成绩的最小分:[45 59 50 47 50]
print(f"前四名学生,各科成绩波动情况:{np.std(temp, axis=0)}")  # 前四名学生,各科成绩波动情况:[12.57974563 12.69596393 14.70331595 13.00961183 17.93042108]
print(f"前四名学生,各科成绩的平均分:{np.mean(temp, axis=0)}")  # 前四名学生,各科成绩的平均分:[60.5  74.75 65.25 63.5  70.  ]

# 如果需要统计出某科最高分对应的是哪个同学?
# np.argmax(temp, axis=)
# np.argmin(temp, axis=)
print(f"前四名学生,各科成绩最高分对应的学生下标: {np.argmax(temp,axis=0)}") # 前四名学生,各科成绩最高分对应的学生下标: [0 0 3 3 2]

标签: python ndarray

发表评论