1 引入 NumPy
#引入numpy
import numpy as np
#查看使用的numpy版本
np.__version__
'1.20.1'
2 数组转换
numpy.arange函数用于返回一个有起点和终点的固定步长的排列,主要参数如下:
start: 起始值,默认值为0,可选项
end: 结束值(不含)
step: 步长,默认值为1
dtype:默认为None,可选项
arr = np.arange(1, 13, 1) #创建1-12的数组,步长为1
arr #输出数组
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
# 1.类型转换
arr.dtype #查看arr类型
dtype('int32')
# 类型转换
arr1 = arr.astype(np.float32) #arr类型转化为float32
# 新类型查看
arr1.dtype
dtype('float32')
arr1 #查看arr1
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.],
dtype=float32)
arr2 = arr1.reshape((2, 2, 3)) #arr1转化为二维数组
arr2.shape #查看arr2的形状
(2, 2, 3)
arr2 #查看arr2
array([[[ 1., 2., 3.],
[ 4., 5., 6.]],
[[ 7., 8., 9.],
[10., 11., 12.]]], dtype=float32)
arr3 = arr2.reshape((-1, 4)) #改变维度为4列,-1表示行数自动计算
arr3.shape #查看arr3的形状
(3, 4)
arr3 #输出arr3
array([[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.],
[ 9., 10., 11., 12.]], dtype=float32)
3 数组合并
numpy.random.randn()函数可以返回一个或一组样本,具有标准正态分布。
# 创建2×5的数组arr1
arr1 = np.random.randn(2, 5)
arr1 #输出arr1
array([[-0.9670134 , -0.47096653, -1.43399181, 0.51594553, -0.08928714],
[ 0.90023954, -1.0276311 , -0.12250311, -0.7871368 , -0.03927209]])
# 创建2×5的数组arr2
arr2 = np.random.randn(2, 5)
arr2 #输出arr2
array([[-0.09855743, 0.72905217, -1.04309003, 0.20951562, 0.51439581],
[-2.15628618, 0.77254079, 1.29226827, 1.23900826, 0.35886853]])
二、合并
1.拼接
·数组的拼接:通过concatenate方法进行数组拼接
·沿某个已存在的维度进行拼接
·不会产生新的维度
·数组的堆叠:通过stack, vstack,hstack方法进行数组堆叠
stack:沿着一个新的维度进行堆叠,产生新的维度
vstack:沿着第0个维度进行堆叠,不产生新的维度 hstack:沿着第1个维度进行堆叠,不产生新的维度
.
.
numpy.concatenate()函数可以一次完成多个数组的拼接,其主要参数如下:
axis:拼接方式,
axis=0表示行拼接,
axis=1表示列拼接
np.concatenate((arr1, arr2), axis=0) #arr1和arr2数组实现行拼接
array([[-0.9670134 , -0.47096653, -1.43399181, 0.51594553, -0.08928714],
[ 0.90023954, -1.0276311 , -0.12250311, -0.7871368 , -0.03927209],
[-0.09855743, 0.72905217, -1.04309003, 0.20951562, 0.51439581],
[-2.15628618, 0.77254079, 1.29226827, 1.23900826, 0.35886853]])
np.concatenate((arr1, arr2), axis=1) #arr1和arr2数组实现列拼接
array([[-0.9670134 , -0.47096653, -1.43399181, 0.51594553, -0.08928714,
-0.09855743, 0.72905217, -1.04309003, 0.20951562, 0.51439581],
[ 0.90023954, -1.0276311 , -0.12250311, -0.7871368 , -0.03927209,
-2.15628618, 0.77254079, 1.29226827, 1.23900826, 0.35886853]])
2、堆叠
·数组的堆叠:通过stack, vstack,hstack方法进行数组堆叠
stack:沿着一个新的维度进行堆叠,产生新的维度
vstack:沿着第0个维度进行堆叠,不产生新的维度
hstack:沿着第1个维度进行堆叠,不产生新的维度
.
.
numpy.stack()函数可以实现输入数个数组不同方式的堆叠,返回堆叠后的1个数组,其主要参数如下:
arrays:需要堆叠的几个形状维度相等的数组
axis:指定以哪种方式进行堆叠数组,axis=0表示垂直堆叠,axis=1表示水平堆叠
#数组作为整体垂直堆叠
np.stack(arrays=(arr1, arr2), axis=0)
array([[[-0.9670134 , -0.47096653, -1.43399181, 0.51594553,
-0.08928714],
[ 0.90023954, -1.0276311 , -0.12250311, -0.7871368 ,
-0.03927209]],
[[-0.09855743, 0.72905217, -1.04309003, 0.20951562,
0.51439581],
[-2.15628618, 0.77254079, 1.29226827, 1.23900826,
0.35886853]]])
numpy.vstack()函数可以按照行顺序垂直的把数组给堆叠起来。
# 沿着垂直方向堆叠
np.vstack(tup=(arr1, arr2))
array([[-0.9670134 , -0.47096653, -1.43399181, 0.51594553, -0.08928714],
[ 0.90023954, -1.0276311 , -0.12250311, -0.7871368 , -0.03927209],
[-0.09855743, 0.72905217, -1.04309003, 0.20951562, 0.51439581],
[-2.15628618, 0.77254079, 1.29226827, 1.23900826, 0.35886853]])
# 沿着水平方向堆叠
np.hstack(tup=(arr1, arr2))
array([[-0.9670134 , -0.47096653, -1.43399181, 0.51594553, -0.08928714,
-0.09855743, 0.72905217, -1.04309003, 0.20951562, 0.51439581],
[ 0.90023954, -1.0276311 , -0.12250311, -0.7871368 , -0.03927209,
-2.15628618, 0.77254079, 1.29226827, 1.23900826, 0.35886853]])
a1 = np.random.randn(2, 2, 3) #创建二维的随机数组a1
a2 = np.random.randn(2, 2, 3) #创建二维的随机数组a2
a1 #输出数组a1
array([[[ 0.75570514, 1.00948715, 1.58108285],
[-0.74635781, 0.41558206, 0.1256004 ]],
[[ 0.18450476, 0.43623251, 0.74673916],
[ 0.83383185, -0.35661262, -0.01590196]]])
a2 #输出数组a2
array([[[ 0.90200408, 1.08564842, 0.19462214],
[-2.75968367, 0.85976622, -1.07147431]],
[[ 1.40195021, -0.60140534, 0.23088269],
[ 1.15312334, -0.15795849, -0.14455376]]])
#数组按行拼接
np.concatenate((a1, a2), axis=0).shape
(4, 2, 3)
# 产生新的维度
np.stack(arrays=(a1, a2), axis=0).shape
(2, 2, 2, 3)
# 按第0个维度堆叠
np.vstack((a1, a2)).shape
(4, 2, 3)
# 按第1个维度堆叠
np.hstack((a1, a2)).shape
(2, 4, 3)
4 数组拆分
arr = np.arange(12) #创建0-11的数组,步长为1
arr #输出arr
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
numpy.split()函数实现把一个数组从左到右按顺序切分,其主要参数如下:
ary:切分的数组
indices_or_sections:整数时,采用该数平均切分;数组时,采用该数组分段切分
axis:沿切分的维度,为0是横向切分,为1是纵向切分
# 平均拆分
np.split(ary=arr, indices_or_sections=4, axis=0)
[array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8]), array([ 9, 10, 11])]
# 分段拆分
np.split(ary=arr, indices_or_sections=[3, 5, 7], axis=0)#(0~3 4~5 6~7 8~12)
[array([0, 1, 2]), array([3, 4]), array([5, 6]), array([ 7, 8, 9, 10, 11])]