周柃君

2020-09-07   阅读量: 856

Python

Numpy学习笔记整理

扫码加入数据分析学习群

1. numpy多维数组,科学计算,加速,简洁,做数据科学最基本的一种结构(重要)

(1)Numpy数学运算: 开发一个算法, 写一个算法, 做一些数学运算, 实现一些公式。

(2)简单来说,Numpy 是 Python 的一个科学计算包,包含了多维数组以及多维数组的操作。

(3)Numpy 的核心是 ndarray 对象,这个对象封装了同质数据类型的n维数组。起名 ndarray 的原因就是因为是 n-dimension-array 的简写。

2. np.array(了解)

import numpy as np

np.array(object, dtype=None)

object:转换的数据

dtype:数据类型

L1 = [1, 2,3]

L2 = (3, 4,5)

L3 = 'abc'

a1=np.array(L1) 即将a1列表转化为numpy.ndarray格式

3. dtype(重要)

Numpy 中的数组比 Python 原生中的数组(只支持整数类型与浮点类型)强大的一点就是它支持更多的数据类型。

基本数据类型:bool、int、uint、float和object

4. 向上转换,整数<小数<字符串(了解),同质(同一种数据类型)

请记住,不同于 Python 列表,NumPy 要求数组必须包含同一类型的数据。如果类型不匹配,NumPy 将会向上转换(如果可行)。

向上转换:(整数向上转化为小数,然后字符串)

L1 = [1, 2,3]

L2 = (3, 4,5)

L3 = 'abc'

5. astype(重要)

a=np.array(L1,dtype=’int’) 将L1列表装换为整数型

a.astype(‘bool’) 将数据类型改变成波尔型

6 矢量化(重要)np优势所在,快速,简洁

a = [[1, 2, 3], [5, 7, 8], [4, 5, 6]]

b = [[6, 2, 1], [2, 3, 1], [4, 5, 6]]

将a和b中对应的数字相加,可以通过使用np将操作过程简单化

np.array(a)+np.array(b)

矢量化代码有很多优点,其中包括:

(1)矢量化代码更简洁易读;

(2)更少的代码行通常意味着更少的错误;

(3)该代码更接近地类似于标准数学符号(使得更容易,通常,以正确地编码数学构造);

(4)矢量化导致更多的“Pthonic”代码。如果没有矢量化,我们的代码将会效率很低,难以读取for循环。

7. 创建常用的数组(了解)

(1)创建一个全0的数组

np.zeros(3) 即为一个三行三列的全0数组

np.zeros([4, 5],dtype='int') 即为四行五列的正数型0数组

a1 = np.array([[1, 2, 3],

[5, 7, 8],

[4, 5, 6]])

np.zeros_like(a1) 即创建一个与a1形式相同的全0数组

(2)全1数组

np.ones([4,3]) 即创建一个四行三列的全1数组

np.ones(10) 一维全1数组

np.ones(10, dtype="int32") 二维全1整数型数组

np.ones((3, 3, 3), dtype="int32") 三维全1整数型数组

(3)单位矩阵

np.eye(5, 4) 即创建一个五行四列的单位矩阵

np.eye(5, 4,k=-1) 其中k表示偏移量

(4)对角矩阵

np.diag([1, 2,3, 4])

结果如下所示:

array([[1, 0, 0, 0],

[0, 2, 0, 0],

[0, 0, 3, 0],

[0, 0, 0, 4]])

8. np.nannp.inf

np.full 创建一个空值矩阵

np.full((3, 4), 666)

结果如下所示:

array([[666, 666, 666, 666],

[666, 666, 666, 666],

[666, 666, 666, 666]])

设置空值和无穷大

np.nan和np.inf都是浮点类型

- "" False " "True,np.nan代表的是布尔值为False

- " "不会判定为np.nan

- 去空格str.strip()

- str.strip,判断是不是缺失值

9. 创建随机数组以及一些分布数组(了解)

np.random.randint(1, 10) # 生成一个随机数

np.random.randint(1, 10,(4, 6) ) # 生成二维随机数组

np.random.rand(3, 4) # 0-1范围之内

np.random.random([3, 4]) # 同上, 参数不一样

np.random.uniform(5, 8, (3, 4)) # 均匀分布

np.random.randn(3, 4) # 标准正太分布

np.random.normal(5, 3, (3, 4)) # 均值为5, 标准差为3, (3, 4)的正态分布随机数

np.random.normal(0, 1, (3, 4)) # 均值为5, 标准差为3, (3, 4)的正态分布随机数

np.random.binomial(10, 0.5, 8) # 数据 0, 1, ....10

np.random.chisquare(3, (3, 4)) # 自由度为3的卡方分布

np.random.standard_t(3, (3, 4)) # 自由度3的t分布

np.random.f(2, 3, (3, 4)) #f分布

10.随机种子的含义(理解)

# 设置随机数种子, 拆开发现不好使, 必须放在一起才好使

np.random.seed(200)

c = np.random.randn(2, 3)

c

11. numpy线性序列(np.arange,np.linspace)(重要)

arange([start,] stop[, step,])

特点: 可以设置开始位置,终止位置和步长,但产生数字的数量不方便控制

np.linspace(开始位置, 终止位置, 产生数量)

特点: 可以设置开始位置和终止位置以及产生数量,但不方便控制步长

s, step = np.linspace(20, 30, 20, endpoint=False, retstep=True)

# retstep=True 返回步长

12. nddarray(shape,dtype)重要

数组的属性:形状(shape)、维度(ndim)和数组元素个数(size)

#dtype按照每一列的类型看的

# 1.看一下shape

# 2.看一下每一列的dtype

13. 数组的索引和切片(很重要)(二维)

与Python原生的列表、元组不同的是,Numpy数组支持多维数组的多维索引。

每一个逗号, 代表索引的一个维度

14. copy,view,赋值和切片

- 如果视图修改了,那么原数据也修改了,视图就是切片之后的数组

- 可以使用view创建视图,这种创建视图的方式和原数据相关联的

- 使用copy创建的变量就没有这个问题,copy创建的变量和原数据没有关系

- 对直接复制(赋值)的变量进行修改,也会改变原数据

- x[:2,2:](会修改原数据)

- view(会修改原数据)

- 直接赋值x_1 = x_2(会修改原数据)

- copy(不会修改原数据)

15.reshaperesize(了解)

- 返回值(函数都有返回值,参数是不会改变的)

- 没有返回值,但是修改原来的数据(理解)


添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
30.9477 1 0 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子