Numpy初体验

Numpy

一、简介

Numpy是高性能科学计算和数据分析的基础包。它也是pandas等其他数据分析的工具的基础,基本所有数据分析的包都用过它。

NumPy为Python带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组。

它将常用的数学函数都支持向量化运算,使得这些数学函数能够直接对数组进行操作,将本来需要在Python级别进行的循环,放到C语言的运算中,明显地提高了程序的运算速度。

1、安装

pip install numpy

2、特殊的导包

数据分析界约定俗成的将numpy包导入命名为np

import numpy as np

二、ndarray-多维数组对象

Numpy的核心特征就是N-维数组对 —— ndarray。

1、创建ndarray数组

方法 描述
array() 将列表转换为数组,可选择显式指定dtype
arange() range的numpy版,支持浮点数
linspace() 类似arange(),第三个参数为数组长度
zeros() 根据指定形状和dtype创建全0数组
ones() 根据指定形状和dtype创建全1数组
empty() 根据指定形状和dtype创建空数组(随机值)
eye() 根据指定边长和dtype创建单位矩阵

1.1 array

np.array([[a,b,c],[x,y,z],···])

列表套列表,内嵌的列表个数为维度。

# 创建一维数组
>>>:arr = np.array([1,2,5,8])

# 创建多维数组
>>>:arr = np.array([[1,2,5,8],[2,4,6,7]])

# dtype指定数组元素类型
>>>:arr3 = np.array([1,2,3,4,5,6], dtype='float')
array([1., 2., 3., 4., 5., 6.])

1.2 arange

创建间隔数为1的范围数组。

np.arange(x) 指定右端点,左端点默认为0。

np.arange(x,y) 指定左右端点。

# 创建0~5,间隔为1的数组,右闭
>>>:np.arange(5)
array([0, 1, 2, 3, 4])
    
# arange创建1~6,间隔为1的数组,右闭
>>>:np.arange(1,6)
array([1, 2, 3, 4, 5])

1.3 linspace

np.linspace(start,stop,num=50,endpoint=True,
retstep=False,dtype=None,axis=0,)

创建间隔数不指定为1的范围数组。

num参数用来控制范围拆分的个数,从而控制间隔数。

endpoint用来指定区间右端点闭或开。

# linspace创建指定拆分个数的数组
>>>:np.linspace(1,10,num=10)
array([1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])

# linspace创建数组时,endpoint可以指定区间右闭或右开
>>>:np.linspace(1,10,num=9,endpoint=False)
array([1., 2., 3., 4., 5., 6., 7., 8., 9.])

1.4 zeros

zeros(shape, dtype=float, order='C')

创建元素全部为0的数组。

sharp用来控制数组的维度和长度(行,列)。

>>>:np.zeros((2,5))
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])

1.5 ones

np.ones(shape, dtype=None, order='C')

创建元素全部为1的数组。

sharp用来控制数组的维度和长度(行,列)。

>>>:np.ones((5,3))
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

1.6 empty

empty(shape, dtype=float, order='C')

创建一个随机元素数组。

sharp用来控制数组的维度和长度(行,列)。

>>>:np.empty((3,3))
array([[2.69329361e-312, 2.61054848e+106, 9.65232955e-312],
       [9.65232955e-312, 9.65232955e-312, 9.65232955e-312],
       [9.65232955e-312, 6.17188958e+303, 2.71615461e-312]])

1.7 eye

np.eye(N, M=None, k=0, dtype=<class 'float'>, order='C')

创建一个2维数组,对角线上为1,其他地方为0。

N:表示行数

M:表示列数,默认与行数一样

k:对角线索引。0(默认值)为主对角线,正值为上对角线,负值为下对角线。

>>>:np.eye(3,2)
array([[1., 0.],
       [0., 1.],
       [0., 0.]])

>>>:np.eye(3,2,-1)
array([[0., 0.],
       [1., 0.],
       [0., 1.]])


2、ndarray对象的特点

这也是它和Python【列表】的不同之处。

  1. 数组对象内的元素类型必须相同
  2. 数组大小不可修改

3、ndarray的常用属性

属性 描述
T 数组的转置(对高维数组而言)
dtype 数组元素的数据类型
size 数组元素的个数
ndim 数组的维数
shape 数组的维度大小(以元组形式)(行,列)
reshape 重塑数组的形状(行,列)
>>>:arr
array([[1, 2, 5, 8],
       [2, 4, 6, 7]])

>>>:arr.T
array([[1, 2],
       [2, 4],
       [5, 6],
       [8, 7]])

>>>:a1
array([[1, 2, 3, 4, 5],
       [1, 2, 3, 4, 5],
       [1, 2, 3, 4, 5]])

>>>:a1.shape
(3, 5)
    

arr6 = np.array([[1, 2, 3, 4, 5],
                 [1, 2, 3, 4, 5],
                 [1, 2, 3, 4, 5]])
>>>:arr6
array([[1, 2, 3, 4, 5],
       [1, 2, 3, 4, 5],
       [1, 2, 3, 4, 5]])

>>>:arr6.reshape(5,3)
array([[1, 2, 3],
       [4, 5, 1],
       [2, 3, 4],
       [5, 1, 2],
       [3, 4, 5]])


4、ndarray的数据类型

  • dtype
类型 描述
布尔型 bool_
整型 int_ int8 int16 int32 int 64
无符号整型 uint8 uint16 uint32 uint64
浮点型 float_ float16 float32 float64
复数型 complex_ complex64 complex128

布尔型:

与Python不一样的是,bool_ 后面多了一个下划线_ 。

整型:

int32只能表示(-2**31,2**31-1),因为它只有32个位,只能表示2**32个数。

无符号整型:

只能用来存正数,不能用来存负数。

补充:

astype()方法可以强制转换数组的数据类型。

5、索引和切片

5.1 一维数组

5.1.1 索引

索引和Python的列表用法一样。

>>>:arr1 = np.array([1,2,3,4])
>>>:arr1[0],arr1[1],arr1[2]
(1, 2, 3)


5.1.2 切片

切片也和Python的列表用法一样。

>>>:arr1
array([1, 2, 3, 4])
    
>>>:arr1[1:2]
array([2])

>>>:arr1[1:3]
array([2, 3])

>>>:arr1[1:4]
array([2, 3, 4])


5.2 二维数组

5.2.1 索引

取元素要确定行和列的位置:

数组[行,列]/数组[(行,列)]

>>>:arr2 = np.array([[1,2,3,4],[5,6,7,8]])
>>>:arr2
array([[1, 2, 3, 4],
           [5, 6, 7, 8]])

>>>:arr2[0,0],arr2[1,1]
(1, 6)
    
>>>:arr2[(0,0)]    
1


5.2.2 切片

>>>:arr3
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],
       [24, 25, 26, 27, 28, 29]])

>>>:arr3[1:3,1:3]
array([[ 7,  8],
       [13, 14]])

>>>:arr3[2:5,1:4]
array([[13, 14, 15],
       [19, 20, 21],
       [25, 26, 27]])


5.3 布尔型索引

将同样大小的布尔数组传进索引,会返回一个有True对应位置的元素的数组

>>>:arr3
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],
       [24, 25, 26, 27, 28, 29]])

>>>:>4
array([[False, False, False, False, False,  True],
       [ True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True]])

>>>:arr3[arr3>5]
array([ 6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,23, 24, 25, 26, 27, 28, 29])

>>>:arr3[arr3<13]
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])


5.4 花式索引

中括号中套中括号,内层中括号中写索引下标,可取多个不连续值。

>>>:n1 = np.array([1,2,3,4,5])
>>>:n1
array([1, 2, 3, 4, 5])

>>>:n1[[1,3]]
array([2, 4])

三、通用函数

能对数组中所有元素同时进行运算的函数就是通用函数。

1、常用通用函数

1.1 一元函数

函数 功能
abs、fabs 分别是计算任意数和浮点数的绝对值
sqrt 计算各元素的平方根
square 计算各元素的平方
exp 计算各元素的指数e**x
log 计算自然对数
sign 计算各元素的正负号
ceil 向上取整
floor 向下取整
rint 计算各元素的值四舍五入到最接近的整数,保留dtype
modf 将数组的小数部分和整数部分以两个独立数组的形式返回,与Python的divmod方法类似
isnan 计算各元素的正负号
isinf 表示那些元素是无穷的布尔型数组
cos,sin,tan 普通型和双曲型三角函数
>>>:a = -4
>>>:np.abs(a)
4
>>>:b = -4.4423423
>>>:np.abs(b)
4.4423423
>>>:np.fabs(b)
4.4423423
>>>:np.fabs(a)
4.0 
    
# 向上取整
>>>:np.ceil(b)
-4.0

# 向下取整
>>>:np.floor(b)
-5.0
    
# 四舍五入
>>>:arr4 = np.linspace(1,5,num=4)
>>>:arr4
array([1.        , 2.33333333, 3.66666667, 5.      ])
>>>:np.rint(arr4)
array([1., 2., 4., 5.])
    
# 拆分整数与小数
>>>:np.modf(4.5)
(0.5, 4.0)
    
>>>:np.isnan(3)
False
>>>:np.isnan(np.nan)
True


1.2 二元函数

函数 功能
add 将数组中对应的元素相加
subtract 从第一个数组中减去第二个数组中的元素
multiply 数组元素相乘
divide、floor_divide 除法或向下圆整除法(舍弃余数)
power 对第一个数组中的元素A,根据第二个数组中的相应元素B计算A**B
maximum,fmax 计算最大值,fmax忽略NAN
miximum,fmix 计算最小值,fmin忽略NAN
mod 元素的求模计算(除法的余数)
>>>:arr1
array([1, 2, 3, 4])
>>>:arr2
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

>>>:np.add(1,2)
3

>>>:np.subtract(arr2,arr1)
array([[0, 0, 0, 0],
       [4, 4, 4, 4]])


2、数学统计方法

函数 功能
sum 求和
cumsum 求前缀和
mean 求平均数
std 求标准差
var 求方差
min 求最小值
max 求最大值
argmin 求最小值索引
argmax 求最大值索引
>>>:np.sum(arr1)
10
    
# 累加和
>>>:np.cumsum(arr2)
array([ 1,  3,  6, 10, 15, 21, 28, 36], dtype=int32)
    
>>>:arr5 = np.array([3,5,2,56,1,4,6])
>>>:arr5
array([ 3,  5,  2, 56,  1,  4,  6])
# 求最小值的索引
>>>:np.argmin(arr5)
4


3、随机数

有关随机数的函数在np.random的子包当中。

常用随机函数:

函数 功能
rand 给定形状产生随机数组(0到1之间的数)
randint 给定形状产生随机整数
chocie 给定形状产生随机选择
shuffle 与random.shuffle相同
uniform 给定形状产生随机数组
# 形状
>>>:np.random.rand(4,3)
array([[0.21599854, 0.28993531, 0.31989618],
       [0.26206019, 0.69186237, 0.30819278],
       [0.21106428, 0.68874875, 0.58279413],
       [0.78623511, 0.80717789, 0.66939268]])
    
# 起始,终结,形状
>>>:np.random.randint(4,10,size=(2,3))
array([[9, 6, 8],
       [4, 7, 5]])

# 随机选择
>>>:np.random.choice(4,5)
array([1, 3, 2, 0, 1])
>>>:np.random.choice([1,5,7,9],5)
array([5, 9, 1, 7, 7])
    
# 打乱
>>>:arr7 = np.random.choice([1,2,3,4,5,7,9],5)
>>>:arr7
array([2, 5, 4, 5, 3])
>>>:np.random.shuffle(arr7)
>>>:arr7
array([5, 3, 4, 2, 5])


posted @ 2020-04-15 22:26  Donner  阅读(367)  评论(0编辑  收藏  举报