Python数据分析 1-4 NumPy数组的转换、合并和拆分

NumPy数组的转换、合并和拆分

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个维度进行堆叠,不产生新的维度
Python数据分析 1-4 NumPy数组的转换、合并和拆分_第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])]

你可能感兴趣的:(python,numpy,数据分析)