python 中numpy科学计算工具包——基础数据结构

认识numpy基础数据结构

# 认识数组

ar = np.array([[1,2,3,4,5],[6,7,8,9,10]])

br = [[1,2,3,4,5],[6,7,8,9,10]]

print(ar,type(ar)) # n维数组称为ndarray

print(br,type(br)) #列表

print(ar.ndim) # 输出数组有几维 ( 'list' object has no attribute 'ndim')

print(ar.shape) #shape 输出数组几行几列 print(ar.size) #size 输出数组共有几个元素

结果:

#创建数组(生成器+列表)

ar1 = np.array(range(10)) # 生成器range(10)为0-9的整数

ar2 = np.arange(10) # 生成0-9的整数

ar3 = np.array([1,2,3,4,5]) # 用列表生成 (数组整型)

ar4 = np.array([[1,2,3,4,5],['a','b','c','d','e']]) # 用列表生成 (数组字符型)

ar5 = np.array([[1,2,3,4,5],['a','b','c','d','e','g']]) # 用列表生成,元素个数不一样导致变成列表

ar6 = np.random.rand(10).reshape(2,5) #生成0-1的值10个,形状是2行5列

print(ar1)

print(ar2)

print(ar3)

print(ar4,ar4.ndim) # 2维数组

print(ar5,ar5.ndim) # 列表

print(ar6,ar6.ndim) # 2维数组

结果:

# arange()的用法

print(np.arange(10)) # 0-9的整数

print(np.arange(5,12)) # 5-11的整数

print(np.arange(10.0)) # 0-9的浮点数

print(np.arange(5.0,12,2)) # 5.0-12.0 步常为2的数

结果:

 

 

 

#linspace()的用法 --[开始,结尾]上计算的num个均匀间隔的样本 print(np.linspace(10,20,21,endpoint=True,retstep=False)) # retstep是否输出间隔,true为输出默认false print(np.linspace(10,20,21,endpoint=False,retstep=True)) # endpoint包不包括结尾的数,默认true为包括 print(np.linspace(10,20,21,retstep=True))

s = np.linspace(10,20,21,retstep=True)

print(type(s)) #类型为tuple,元组 结果:

# zeros()/zeros_like()/ones()/ones_like()

print(np.zeros(10)) # 输出10个0,默认为浮点型数值

print(np.zeros((2,5),dtype=int)) #创建2行5列的数组,数值类型为整型

cr = np.array([list(range(10)),list(range(10,20))])

dr = np.arange(20).reshape(2,10)

print(cr)

print(dr)

print(np.zeros_like(dr)) # 创建像dr一样的,元素为0的数组

结果:

# eye() 创建n*n的单位矩阵,对角线是1,其余为0 print(np.eye(5))

结果:

 

 numpy通用函数

#  数组形状  .T/np.reshape()/np.resize()   都是生成新的数组,不会改变原数组
#  .T 转置函数 shape为(3,4)/(2,3,4)转化为(4,3)/(4,3,2) 一维数值转置后不变
er = np.array(range(16))
er1 = np.zeros((2,5))
er2 = er.reshape(8,2)
print(er)
print(er.T)
print(er1)
print(er1.T)
print(er2)
print(np.ones((2,5)).reshape(5,2))
print(np.reshape(np.arange(16),(2,8)))
# np.resize() 根据重新设定的size进行变化,数值可能因为size而循环也可能截断
print(np.resize(np.arange(3),(3,4)))
print(np.resize(np.arange(14),(3,4)))

结果:

# 数组的复制  fr1.copy()
fr1 = np.arange(10)
fr2 = fr1
print(fr1 is fr2)
fr1[0] = 100
print(fr1,fr2)    # fr1,fr2都会改变
fr3 = fr1.copy()
fr1[1] = 1000
print(fr1,fr3)    # fr3 不会改变

结果:

 

# 数组类型改变   .astype()
gr1 = np.arange(10,dtype = float)    #整型改为float型
gr2 = gr1.astype(np.int64)           #又改为整型int64
print(gr1,gr1.dtype)
print(gr2,gr2.dtype)

结果:

 

#数组堆叠
a = np.arange(5)
b= np.arange(5,10)
print(a,b)
print(np.hstack((a,b)))  # 横向连接
print(np.vstack((a,b)))  # 竖向连接 变成(2,5)的数组(数字个数一定相同否则会报错)

a1 = np.array([[1],[2],[3],[4],[5]])
b1 = np.array([['a'],['b'],['c'],['d'],['e']])
print(a1)
print(b1)
print(np.hstack((a1,b1)))      # 变成(5,2)的数组
print(np.vstack((a1,b1)))      # 变成(10,1)的数组

print(np.stack((a,b)))         # 若只是stack,默认是axis = 0 默认竖向连接
print(np.stack((a,b),axis =1)) # axis = 1,则是横向连接

结果:

#数组拆分
a2 = np.arange(16).reshape(4,4)
print(a2)
print(np.hsplit(a2,2))  # 横向拆分成两列
print(np.hsplit(a2,2)[1])
print(np.vsplit(a2,4))  # 竖向拆分成4行
print(np.vsplit(a2,4)[1])

结果:

#数组的计算
a3 = np.arange(1,7).reshape(2,3)
print(a3)
print(a3+1)      # 每个数值加1
print(a3 * 2)    # 每个数值乘以2
print(1/(a3+1))  # 混合运算
print(a3.max(),'/',a3.min())
print(a3.mean(),'/',a3.std(),'/',a3.var())
print(a3.sum(),np.sum(a3,axis = 0 ),np.sum(a3,axis =1 )) #axis=0竖向求和,axis=1横向求和
print(np.sort(np.array([1,4,3,2,6])))  # 排序

结果:

 

numpy 索引与切片

# 一维数组
a4 = np.arange(3,20)
print(a4)
print(a4[4])    #第五个值
print(a4[:3])   #前三个值
print(a4[2:5])  #第三,四,五个值
print(a4[::2])  #以2的步长取值

结果:

# 二维数组
a5 = np.arange(16).reshape(4,4)
print(a5)
print(a5[2])
print(a5[2][2])
print(a5[1:3])
print(a5[2,2])   # 中间是逗号,表示索引为2的列(第三列)与索引为2的行 就是10
print(a5[:1,2:]) # 逗号前为行,则是第1行,逗号后为列,则是第3,4列,就是[2,3]

结果:

# 三维数组

a6 = np.arange(12).reshape(3,2,2)  # 3个3行3列
print(a6)
print(a6[2])
print(a6[2][0])
print(a6[2][0][1])

结果:

#布尔型索引与切片 保留为true的值

a7 = np.arange(12).reshape(3,4)
print(a7)
i = np.array([True,False,True])
j = np.array([True,True,False, False])
print(i)
print(j)
print(a7[i,:])   # 逗号前是行的选择,i 中1,3是true,2是false,则选1,3行,逗号后是列,则全选
print(a7[:,j])
print(a7>5)
print(a7[a7>5])

结果:

# 数组索引与切片的值的更改与复制
a8 = np.arange(10)
a8[1] = 100
print(a8)
a8[7:9]  = 1000
print(a8)
a9 = np.arange(10)
a10 = a9.copy()
a9[2] = 100
print(a9,a10)

结果:

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值