系统完整地学习python数据分析基础知识之第一章NumPy库之1.1ndarray多维数组基础知识

从0开始学python数据分析的知识总结,先从三剑客Numpy,pandas,matplotlib数据库的基础知识总结起。
在这里插入图片描述

创建多维数组

import numpy as np
data1 = [5,7,9,20] #列表
arr1 = np.array(data1)
arr1
array([ 5,  7,  9, 20])
data2 = ([5,7,9,20]) #元组
arr2 = np.array(data2)
arr2
array([ 5,  7,  9, 20])
data3 = [[1,2,3,4],[5,6,7,8]]#多维数组
arr3 = np.array(data3)
arr3
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])
arr3.shape # ndarray的shape是维度大小的元组
(2, 4)
arr3.dtype #dtype是解释说明ndarray数据类型的对象
dtype('int32')

zeros函数(可以创建指定长度或形状全为0 的数组)

np.zeros(8)
array([0., 0., 0., 0., 0., 0., 0., 0.])
np.zeros((3,4))
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])

ones函数(可以创建指定长度或形状的全1数组)

np.ones(4)
array([1., 1., 1., 1.])
np.ones(4)
array([1., 1., 1., 1.])
#empty函数(可以创建一个没有具体值得数值【即垃圾值】)
np.empty((2,2,2))
array([[[0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.]]])

arange函数(类似于python的内置函数range,但是arange函数主要用于创建数组)

np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
 #函数                    使用说明
 #arange                  类似于内置的range函数,用于创建数组
 #ones                    创建指定长度或者形状的全1数组
 #ones_like               以另一个数组为参考,根据其形状和dtype创建全1数组
 #zeros、zeros_like       类似于ones、one_like,创建全0数组
 #empty、empty_like       同上,创建没有具体值的数
 #eye、identity           创建正方形的N*N单位矩阵 
arr3
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])
arr5 = np.ones_like(arr3)
arr5
array([[1, 1, 1, 1],
       [1, 1, 1, 1]])
#ndarray对象属性
#属性                      使用说明
#.ndim                     秩,即数据轴的个数
#.shape                    数组的维度
#.size                     元素的总个数
#.dtype                    数据类型
#.timesize                 数组中每个元素的字节大小
data = [[2,4,5],[3,5,7]]
arr = np.array(data)
arr
array([[2, 4, 5],
       [3, 5, 7]])
arr.ndim #数组的维度
2
arr.size #元素的总个数
6
arr.itemsize #数组中每个元素的字节大小
4
arr.dtype #数组类型
dtype('int32')

ndarray数据类型

arr1 = np.arange(5)
arr1
array([0, 1, 2, 3, 4])
arr1.dtype
dtype('int32')
arr2 = np.arange(5,dtype='float64')
arr2
array([0., 1., 2., 3., 4.])
arr2.dtype
dtype('float64')

对于创建好的ndarray,可通过astype方法进行数据类型的转换

arr1 = np.arange(6)
arr1
array([0, 1, 2, 3, 4, 5])
arr1.dtype
dtype('int32')
arr2 = arr1.astype(np.float64)
arr2
array([0., 1., 2., 3., 4., 5.])
arr2.dtype
dtype('float64')
arr3 = arr1.astype('string_')
arr3
array([b'0', b'1', b'2', b'3', b'4', b'5'], dtype='|S11')
arr3.dtype
dtype('S11')

2.1.4数组变换

1.数组重塑(通过reshape方法改变其数据维度、与reshape相反的方法是数据散开(ravel)数据或扁平化(flatten))

arr = np.arange(10).reshape((5,2))
arr
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])
arr.ravel()
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])
arr.flatten()
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])

2.数组合并

concatenate 方法通过指定轴方向,将多个数组合并在一起

arr1 = np.arange(12).reshape(3,4)
arr1
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
arr2 = np.arange(12,24).reshape(3,4)
arr2
array([[12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])
np.concatenate([arr1,arr2],axis = 0)
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])
np.concatenate([arr1,arr2],axis = 1)
array([[ 0,  1,  2,  3, 12, 13, 14, 15],
       [ 4,  5,  6,  7, 16, 17, 18, 19],
       [ 8,  9, 10, 11, 20, 21, 22, 23]])
#关于axis,官方的解释:轴用来为超过一维数组定义的属性,二维数组拥有俩个轴:第0轴沿着行的方向垂直向下,第1轴沿着列的方向水平延伸。
#即:1表示横轴方向从左到右;0表示纵轴,方向从上到下。当axis =1时,数组变化是横轴的,体现出列的增加或减少。
#反之,当axis = 0时,数组的变化是纵向的,体现的是列的增加或减少。
#此外,Numpy中提供了几个比较简单易懂的方法,也可以进行数组合并,如:vstack和hstack
np.vstack((arr1,arr2))
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])
np.hstack((arr1,arr2))
array([[ 0,  1,  2,  3, 12, 13, 14, 15],
       [ 4,  5,  6,  7, 16, 17, 18, 19],
       [ 8,  9, 10, 11, 20, 21, 22, 23]])

3.数组拆分(通过split方法可以将数组拆分为多个数组)

arr = np.arange(12).reshape((6,2))
arr
array([[ 0,  1],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7],
       [ 8,  9],
       [10, 11]])
np.split(arr,[2,4])
[array([[0, 1],
        [2, 3]]),
 array([[4, 5],
        [6, 7]]),
 array([[ 8,  9],
        [10, 11]])]

数组转置(可以通过transpose方法进行转置或者数组具有T属性,可用于数组转置)

arr = np.arange(12).reshape(3,4)
arr
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
arr.transpose((1,0))
array([[ 0,  4,  8],
       [ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11]])
arr.T
array([[ 0,  4,  8],
       [ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11]])

ndarray的swapaxes方法用于轴对换

arr = np.arange(16).reshape((2,2,4))
arr
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])
arr.swapaxes(1,2)
array([[[ 0,  4],
        [ 1,  5],
        [ 2,  6],
        [ 3,  7]],

       [[ 8, 12],
        [ 9, 13],
        [10, 14],
        [11, 15]]])

2.1.5 NumPy的随机函数(在numpy.random模块中,提供了多种随机数生成函数)

arr = np.random.randint(100,200,size=(5,4)) #生成整数随机数
arr
array([[100, 137, 132, 198],
       [107, 139, 129, 184],
       [107, 126, 134, 157],
       [174, 104, 173, 104],
       [113, 195, 185, 149]])
arr = np.random.normal(4,5,size = (3,5)) #生成平均数为0,标准差为1 的正态分布函数
arr
array([[ 1.17890328e+01,  4.59669137e+00,  5.20738189e+00,
         7.56425644e+00,  8.63886606e+00],
       [ 5.58127214e+00, -1.17285694e-02,  4.44473479e+00,
         2.44976774e+00,  4.88036600e+00],
       [-1.95245217e+00, -5.20274334e+00, -1.33826275e+00,
         3.13325980e+00,  4.81799253e+00]])
arr = np.random.normal(4,5,size = (3,5)) #通过normal函数生成指定均值和标准差的正态分布的数组。
arr
array([[-1.94533147,  3.23929235, 14.83890278, -3.54117721,  3.7082561 ],
       [ 3.18057709,  4.90052895,  2.03134648,  9.4999035 , -4.63137523],
       [-0.22708587,  3.88939542,  7.28873611,  2.82866186,  2.66774828]])
#以下为部分numpy.randpm模块中的随机数函数
# 函数                          使用说明
# rand                          产生均匀分布的样本值
# randint                       给定范围内取随机整数
# randn                         产生正态分布的样本值
# seed                          随机数种子
# permutation                   对一个序列随机排序,不改变原数组
# shuffle                       对一个序列随机排序,改变原数组
# uniform(low,high,size)        产生均匀分布的数组,low表示起始值,high表示结束值,size表示形状
# normal(loc,scale,size)        产生具有正态分布的数组,loc表示均值,scale表示标准差
# poisson(lam,size)             产生具有泊松分布的数组,lam表示随机事件fashenglv
arr = np.random.randint(100,200,size = (5,4))
arr
array([[158, 162, 135, 184],
       [127, 133, 108, 163],
       [195, 149, 167, 185],
       [175, 137, 106, 155],
       [174, 138, 112, 144]])
np.random.permutation(arr)
array([[158, 162, 135, 184],
       [127, 133, 108, 163],
       [174, 138, 112, 144],
       [195, 149, 167, 185],
       [175, 137, 106, 155]])
arr
array([[158, 162, 135, 184],
       [127, 133, 108, 163],
       [195, 149, 167, 185],
       [175, 137, 106, 155],
       [174, 138, 112, 144]])
np.random.shuffle(arr)
arr
array([[127, 133, 108, 163],
       [174, 138, 112, 144],
       [195, 149, 167, 185],
       [158, 162, 135, 184],
       [175, 137, 106, 155]])

后续会继续更新详解4个小节的NumPy库的基础知识,完成NumPy数据库知识总结后续会继续总结三剑客后俩位pandas库和matplotlib库的知识总结,喜欢的朋友点个关注吧!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值