创建数据
- ⭕创建数据: 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)
以上!