展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

NumPy基础使用(二)

  • 复合类型
"""
第一层必须是元组
默认情况下,需要每个元素的数据类型保持一致
如果每个元素的元素类型不一致,需要分别指定每个元素的类型
指定元素类的方式:
方式一:
np.array(data,dtype="3str,int,3int")
方式二:简写
np.array(data,dtype="U3,i,3i")
字符码 简写
bool ?
int8/16/32/64 i1/2/4/8
float8/16/32/64 f1/2/4/8
str U<字符数>
datetime64 M8[Y] M8[M] M8[D] M8[h] M8[m] M8[s]
方式三:别名
dtype=[
('name','U3'),
('sno','i'),
('score','i',3) # 成绩的别名score,类型是int,长度是3
]
"""
data = [
("张三s",1,[89,90,70]),
("李四",2,[99,89,77]),
("王五是",3,[77,99,88])
]
# 参数,指定类型
a = np.array(data,dtype="U3,i,3i")
print(a)
# output
[('张三s', 1, [89, 90, 70]) ('李四', 2, [99, 89, 77]) ('王五是', 3, [77, 99, 88])]
# 遍历
for stu in a:
for s in stu:
print(s)
# output
张三s
1
[89 90 70]
李四
2
[99 89 77]
王五是
3
[77 99 88]
for stu in a:
print("学号:",stu[1])
print("姓名:",stu[0])
print("成绩:")
print("语文",stu[2][0],"数学:",stu[2][1],"英语",stu[2][2])
# output
学号: 1
姓名: 张三s
成绩:
语文 89 数学: 90 英语 70
学号: 2
姓名: 李四
成绩:
语文 99 数学: 89 英语 77
学号: 3
姓名: 王五是
成绩:
语文 77 数学: 99 英语 88
  • 别名方式
data = [
("张三s",1,[89,90,70]),
("李四",2,[99,89,77]),
("王五是",3,[77,99,88])
]
dtype=[
('name','U3'),
('sno','i'),
('score','i',3)
]
a = np.array(data,dtype=dtype)
print(a)
b = a[0][0] # 通过下标取
print(b)
c = a[0]['name'] # 通过列名取值
print(c)
# output
[('张三s', 1, [89, 90, 70]) ('李四', 2, [99, 89, 77]) ('王五是', 3, [77, 99, 88])]
张三s
张三s
  • 日期
data = [
"2023",
"2023-11",
"2023-11-09",
"2023-11-09 11:16:15"
]
a = np.array(data)
# 进行类型转换
b = a.astype("M8[h]")
print(b)
print(b.dtype)
# 计算
c = b[0]-b[1]
print(c)
# output
['2023-01-01T00' '2023-11-01T00' '2023-11-09T00' '2023-11-09T11']
datetime64[h]
-7296 hours
  • 切片
a = np.arange(20,38)
print(a)
print(a[2:5]) # 取出下标2-4的元素
print(a[:5]) # 取出下标0-4的元素
print(a[2:]) # 取出下标2-最后 的元素)
print(a[2:10:2]) # 取值后 下标+2
print(a[::-1]) # 倒叙数组
a.shape = (3,6)
print(a)
print(a[1:3])
print(a[0,0]) # 获取下标0,0的元素
print(a[0][0]) # 获取下标0,0的元素
print(a[0,0:3]) # 0行 0-2的元素
print(a[:2,:3]) # 0-1行中的 0-2列的元素
print(a[:2,2:5])
print(a[:,2:5])
output
[20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37]
[22 23 24]
[20 21 22 23 24]
[22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37]
[22 24 26 28]
[37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20]
[[20 21 22 23 24 25]
[26 27 28 29 30 31]
[32 33 34 35 36 37]]
[[26 27 28 29 30 31]
[32 33 34 35 36 37]]
20
20
[20 21 22]
[[20 21 22]
[26 27 28]]
[[22 23 24]
[28 29 30]]
[[22 23 24]
[28 29 30]
[34 35 36]]
  • 案例
a = np.arange(1,11)
print(a)
a[0] = 10
print(a)
a[3:7] = 20
print(a)
a[:] = 0 # 全部设置为0
print(a)
# 掩码筛选出偶数
a[a%2==0] = -1
print(a)
output
[ 1 2 3 4 5 6 7 8 9 10]
[10 2 3 4 5 6 7 8 9 10]
[10 2 3 20 20 20 20 8 9 10]
[0 0 0 0 0 0 0 0 0 0]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
  • 掩码
a = np.arange(1,5)
print(a)
m = [True,False,True,False] # 掩码
b = a[m] # 通过掩码获取值
print(b)
a = np.arange(1,11)
print(a)
b = a > 4
print(a[b])
# 输出打印
[1 2 3 4]
[1 3]
[ 1 2 3 4 5 6 7 8 9 10]
[ 5 6 7 8 9 10]
  • 案例
a = np.arange(1,101)
# 循环
lst = []
for i in a:
if(i%3==0):
lst.append(i)
print(lst)
# 推导式
lst = [i for i in a if i%3==0]
print(lst)
# 掩码
lst = a[a%3==0]
print(lst)
a = np.arange(1,101)
b = (a%3==0) & (a%7==0)
print(a[b])
output
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
[ 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99]
[21 42 63 84]
  • 垂直合并与垂直拆分
a = np.arange(1,13).reshape(4,3)
b = np.arange(13,19).reshape(2,3)
print(a)
print(b)
# 垂直合并两个数组,参数要是一个元组
c = np.vstack((a,b))
print(c)
# 将数组垂直拆分,要能被等分
d = np.vsplit(c,3) # 将c拆分成3
for d1 in d:
print(d1)
# 输出打印
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[13 14 15]
[16 17 18]]
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]
[13 14 15]
[16 17 18]]
[[1 2 3]
[4 5 6]]
[[ 7 8 9]
[10 11 12]]
[[13 14 15]
[16 17 18]]
  • 案例
bj1 = [
["张三",89,90,78],
["李四",89,90,78],
["王五",89,90,78],
["赵六",89,90,78]
]
bj2 = [
["张三1",89,90,78],
["李四1",89,90,78]
]
a1 = np.array(bj1)
a2 = np.array(bj2)
c = np.vstack((a1,a2))
print(c)
print(len(c),c.size)
output
[['张三' '89' '90' '78']
['李四' '89' '90' '78']
['王五' '89' '90' '78']
['赵六' '89' '90' '78']
['张三1' '89' '90' '78']
['李四1' '89' '90' '78']]
6 24
  • 水平合并与水平拆分
a1 = np.arange(1,10).reshape(3,3)
a2 = np.arange(11,20).reshape(3,3)
print(a1)
print(a2)
# axis=0表示垂直合并,axis=1表示水平合并
c = np.concatenate((a1,a2),axis=1)
print(c)
# axis拆分的方向:0表示x轴,1表示y轴
d = np.split(c,3,axis=1)
for d1 in d:
print(d1)
output
[[1 2 3]
[4 5 6]
[7 8 9]]
[[11 12 13]
[14 15 16]
[17 18 19]]
[[ 1 2 3 11 12 13]
[ 4 5 6 14 15 16]
[ 7 8 9 17 18 19]]
[[1 2]
[4 5]
[7 8]]
[[ 3 11]
[ 6 14]
[ 9 17]]
[[12 13]
[15 16]
[18 19]]
  • 常用方法
a = np.arange(1,11)
print(a) # [ 1 2 3 4 5 6 7 8 9 10]
b = np.sum(a) # 求和,55
print(b)
b = np.mean(a) # 求平均,5.5
print(b)
b = np.prod(a) # 求所有元素的乘积,3628800
print(b)
b = np.max(a) # 求最大值,10
print(b)
b = np.argmax(a) # 求最大值的下标,9
print(b)
b = np.min(a) # 求最小值,1
print(b)
b = np.argmin(a) # 求最小值的下标,0
print(b)
b = np.std(a) # 求标准差,2.8722813232690143
print(b)
b = np.var(a) # 求方差,8.25
print(b)
b = np.cumsum(a) # 从0开始累积和,[ 1 3 6 10 15 21 28 36 45 55]
print(b)
b = np.cumprod(a) # 从1开始累积乘积,[ 1 2 6 24 120 720 5040 40320 362880 3628800]
print(b)
b = np.median(a) # 求中位数,5.5
print(b)
posted @   DogLeftover  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
历史上的今天:
2022-11-10 idea使用token
点击右上角即可分享
微信分享提示