零基础学python(1/7)|numpy|数组基本操作(有更新)

Numpy/数组/基本操作

创建数据

  • ⭕创建数据: np.array()
  • ⭕创建全零数据:np.zeros()
  • ⭕创建全1数据:np.ones()
  • ⭕创建自定义数据:np.full()
  • ⭕创建空白(随机)数据:np.empty()
  • ⭕偷懒创建:np.xxx_like()
  • ⭕创建规则/范围数:np.arange()
  • ⭕返回范围数:np.linspace()
  • ⭕查看数据维度: array.ndim

例1:创建一维数据books1=[1,2,3,4],并查看data0的数据维度。

import numpy as np
books1=np.array([1,2,3,4])
print("data:",books1,"\ndimension:",books1.ndim)

输出结果如下:
在这里插入图片描述
例2:创建一组二维数据,并查看数据维度

import numpy as np
books3=np.array([
[1,2,3,4],
[5,6,7,8],
[9,10,11,12]
])
#注意[]的用法和嵌套
print('data:',books3,'\ndimension:',books3.ndim)

输出结果如下:
在这里插入图片描述
如此类推,可创建多维数据,注意弄清楚[]的用法。

有时候初始化数组时,我们可以选择创建全零或全一的数组,或自定义统一数组的值,创建方法和上述类似,但是要指定数据的shape:

zeros=np.zeros([2,3])#全0,2行3列
ones=np.ones([3,4])#全1,3行4列
eights=np.full([2,3],8)#全8,3行4列
print("zeros:\n",zeros)
print("ones:\n",ones)
print("eights:\n",eights)

输出结果如下:
在这里插入图片描述
当然,有时候我们想偷懒,想创建一个和其他某个数组一样的大小的数组,就可以调用np.xxx_like() 这种形式的功能:

a=np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
    ])
ones=np.ones(a.shape)
one_like=np.ones_like(a)#np.zeros_like(),np.full_like()
print("ones shape\n:",ones.shape)
print("one_like shape:\n",one_like.shape)
print("one_like:\n",one_like)

结果如下:
在这里插入图片描述
更简单的,我们可以创建规则数据,指定个数或规定范围和步长。或直接返回某个范围内的指定个数数值:

print("numpy range:\n",np.arange(6))#创建6个规则数字
print("diy range:\n",np.arange(3,10,2))#取数,范围[3,10],步长为2
print("linspace:\n",np.linspace(-1,1,5))#从-1到1,返回5个数据点
print("add segments:\n",np.linspace(-1,1,5,endpoint=False))#上面实际上分了4个区域,而加一个endpoint后可以分五个区域

在这里插入图片描述

数据变化

  • ⭕拓展维度:np.expand_dims() 或 np.newaxis
  • ⭕删除维度:np.squeeze()
  • ⭕合并数据:np.concatenate()
  • 拆解数据:
    ⭕横拆:np.vspilt()
    ⭕竖拆:np.hsplit()
  • ⭕列合并:np.column_stack()
  • ⭕行合并:np.row_stack()
  • ⭕垂直合并:np.vstack()
  • ⭕水平合并:np.hstack()
  • ⭕改变数据结构:np.reshape()
    例1:简单合并books1和books2=[5,6,7,8]
books=np.concatenate([books1,books2])
print(books)

输出结果如下:
在这里插入图片描述
可以看到同样大小的一维数组简单合并起来依然是一维数组。

那么,如果想合并成二维数组,则需要拓展维度

例2:合并books1,books2,合并后变成二维数据

#step1:把两组数据都变成二维的
#以下两种方法都可以加维度
books1_expand=np.expand_dims(books1,0)
books2_expand=books2[np.newsaxis,:]
#step2:重复例1,合并数据
all_books=np.concatenate([books1_expand,books2_expand])

当然,合并数据还可以有,保持列维度或行维度不变即垂直合并或水平合并

print('保持列维度不变:',np.concatenate([all_books,all_books],axis=0))
print('保持行维度不变:',np.concatenate([all_books,all_books],axis=1))
print('垂直合并:',np.vstack([all_books,all_books]))
print('水平合并:',np.hstack(all_books,all_books))

也可以直接列合并行合并

d = np.array([1,2,3,4,5,6])
e = np.array([11,22,33,44,55,66])
de_stack = np.column_stack([d, e])
print("列合并:",de_stack)
de_rstack=np.row_stack([d,e])
print("行合并:",de_rstack)

维度可以添加,自然也可以删除。删除维度有两种方法。
一种是np.squeeze()
一种是array_expand.squeeze(axis=1)

books2_squeeze=np.squeeze(books2_expand)
books2_squeeze_axis=books2_expand.squeeze(axis=1)
print(books2_squeeze.shape)
print(books2_squeeze_axis.shape)

数据可以合并,自然也可以拆分。拆分数据分为两种:
一种是横着拆分,np.hsplit()
一种是竖着拆分,np.vsplit()
当然,还可以自定义拆分,np.split(,axis=0/1)
具体看下面例子:

d = np.array([
    [1,2,3,4],
    [8,4,5,4],
    [6,7,8,9],
    [10,11,12,13]
    ])
print("vsplit:",np.vsplit(d, indices_or_sections=2))#分成两段
print("vsplit2:",np.vsplit(d, indices_or_sections=[2,3]))#分成 [:2],[2:3],[3:]
print("hsplit:",np.hsplit(d, indices_or_sections=2))
print("hsplit2:",np.hsplit(d, indices_or_sections=[2,3]))
print("diy_split:",np.split(d,indices_or_sections=2,axis=0))#横着分成两段
print("diy_split2:",np.split(d,indices_or_sections=[2,3],axis=1))#竖着切分

运行后会发现,diy_split的结果与hsplit一致。diy_split2的结果与vsplit2一致。

若要改变数据结构 ,比如排队时排成一队或排成多条队,就要使用np.reshape()函数。

a=np.array([1,2,3,4,5,6])
a1=a.reshape([2,3])#创建一个2维数组,2行3列
a2=a.reshape([3,1,2])#创建一个3维1X2的数组
print("a1 shape:",a1.shape)
print(a1)
print("a2 shape:",a2.shape)
print(a2)

获取数组信息

  • ⭕数组总个数:array.size()
  • ⭕数组行维度:array.shape[0] #即做了几次测试
  • ⭕数组列维度:array.shape[1] #即有多少对象参与测试
print('共有多少数据:',books3.size)
print('第一维度是:',books3.shape[0])
print('第二维度是:',books3.shape[1])
print('总维度是:',books3.shape)

以上!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值