文章目录
前言
- Python四种基本数据结构类型
List,Tuple,Set,Dict
- Numpy的数据结构类型
Ndarry(多维数组)
在介绍Numpy之前,先说一下Jupyter Notebook,这是一款数据分析玩家必用的工具,其风格跟我们以往用过的软件开发IDE有很大的不同。
这里简单说一下,Data Science IDE和Code Develop IDE的有什么不同:
- 安装jupyter
pip install jupyter
在工作目录下输入,jupyter notebook,就会启动浏览器,进入进入工作界面:
在此介绍一种我常用的进入工作目录的方式:
- 鼠标点击进入工作目录
- 在文件路径处输入cmd然后回车
效果如下:
- 安装numpy
pip install numpy
一、Numpy是什么?
- 时间转换
0.000 001 毫秒 = 1纳秒
0.001 毫秒 = 1微秒
1000 毫秒 = 1秒
示例:
- array类型
- 生成10个1.0的浮点数列表
# L = [1.0 for i in range(10)]
# 等价代码如下
L1 = []
for i in range(10):
L1.append(1.0)
- numpy array 和Python List 区别是什么?
List 和array的计算效率上的差异:
(np.sum是numpy array的求和函数)
- 结论:
array类型:使用numpy求和函数时间最快:
最快是numpy中的array
其次是python中的List
最后是中间两行数据
在Python中所有的变量都是类和对象,
在Numpy中所有的变量都是C语言中的基本数据类型
为什么选择Numpy?
1.时间上优化:
底层的计算库都是C语言
它的基本类型都是C语言类型
Python:int[整形只有int]
Numpy:int8,int16,int32,int64
2.节省空间:
Python:需要添加额外的类型信息
Numpy:只需要保存数据信息
- 使用astype进行数据转换
- 32和64存储有何不同吗?(查看参数nbytes)
分析:
L:8个数,每个四个字节 4×8 = 32
L64:8个数,每个八个字节 8×8 = 64
-
若是只修改array的dtyte可不可以?
-
结论:
-
L64最开始占用64个字节,int64是8个数
-
dtype直接改为int32,还是64个字节---->16个数
-
dtype直接改为int16,还是64个字节---->32个数
-
同一个数据块,以不同的数据类型进行解析:
二、Array属性讲解
2.1 array属性含义
代码如下(示例):
import numpy as np
x = np.array([[1,2,3],[3,4,5]],dtype = np.int32)
y = x[1]
y[0] = 9
print(x) #打印x的内容
print(x.flags) # array的标志位 OWNDATE = TRUE
print(x.shape) #形状 (行数,列数)
print(x.strides) #每个维度元素之间的字节数间隔
print(x.ndim) #维数
print(x.data) #存储数据的数据块
print(x.size) #总的元素个数
print(x.itemsize) #每个元素的字节数
print(x.nbytes) #数据块总的字节数
print(x.base) #继承自哪个array
print(y)
print(y.flags) #OWNDATE = FALSE
print(y.shape)
print(y.reshape(3,1).shape)
print(y.strides)
print(y.ndim)
print(y.data)
print(y.size)
print(y.itemsize)
print(y.nbytes)
print(y.base)
运行结果:
[[1 2 3]
[3 4 5]]
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
(2, 3)
(12, 4)
2
<memory at 0x000002460673B3A8>
6
4
24
None
[[9 9 9]]
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : False
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
(1, 3)
(3, 1)
(12, 4)
2
<memory at 0x000002460673B3A8>
3
4
12
[[9 9 9]
[3 4 5]]
- x.flags
Y复用X的存储中的前三个数值:
切片会共用存储块,X修改共用部分数值,Y也会改变:
共用存储块:优点:节省空间
- x.shape (array: (行数,列数))
返回的是元组
reng
reshape仍然是复用关系,不生成新的数据块,但若是使用copy()函数会生成新的数据块:
解析元组:
当列数为 -1时,会自动计算列数
- x.strides
strides即步长,例如二维数组: 则如下图中: [ [1,2,3], [4,5,6] ] 其中
行之间(即1与4,2与5,3与6差12字节) 列之间(即1与2,2与3,4与5等差4字节)
- x.ndim 维数
- x.base 继承自哪个array
2.2 array数组与矩阵的生成
2.2.1 zeros、ones、full 函数
代码如下(示例):
- np.zeros 生成全0矩阵
- 一维
- 二维 (必须输入元组)
- np.ones 生成全1矩阵
- 一维
- 二维
- np.full 生成指定值矩阵
2.2.2 arange linspace 函数
- Python中range(起使,终止,间隔) 不包括终止
# Python range
[ i for i in range(10)]
# <==> 等价
list(range(10))
Python中range与Numpy中arange的不同:
np.arange()自动返回array类型,不是生成器和推导器,自动返回生成数据(即np.array类型)
range()返回生成器,不是返回列表,所以必须传给列表或者用列表推到来生成,range()只能解决整数问题
相同:两者用法一样
np.linspace()与np.arange的不同:
np.linspace(起使,终止,个数值)
np.arange(起使,终止,间隔值)
2.2.3 随机数组和矩阵
- 一维
- 二维
不加种子,每执行一次,结果都会不同
加上种子,每执行一次,结果不变
- 均匀分布
- 正太分布
2.3 数组矩阵的基本操作
2.3.1 索引、切片、reshape
- 一维
- 二维
修改subX,X与x都会改变,X是通过x.reshape()产上的,即subX、X与x都指向同一个数据块
x.reshape(1,-1)与x的不同:
x.shape ---->形状 (行数,列数)
Y中每一个元素是一个列表,X中每一个元素就是一个值
2.4 合并和分割
机器学习这门课会大量使用该知识,将来需要大量的数据样本进行训练和测试,训练集数据、测试集数剧,合并和分割的操作
2.4.1 合并操作
- 一维
- 二维
参数axis控制叠加方向 行方向:axis=0 列方向:axis=1
行方向叠加,列数要一样
列放行叠加,行数要一样
numpy提供简单的方法:vstack(垂直) hstack(水平)
一维和二维可以这样合并吗?
但是,使用np.concatenate([A,y])在行方向是错误的,对y使用reshape即可不报错。
使用vstack是不报错的
2.4.2 分割操作
- 一维
- 二维
查看A,A1,A2是否公用一个数据块 -->共用
2.5 数组与矩阵运算
为什么用Numpy做科学运算的基础:
- 乘法运算
- 矩阵与常数运算
Python中numpy.power()函数介绍
power(x, y) 函数,计算 x 的 y 次方
- x 和 y 为单个数字:
-
- x 为列表,y 为单个数字:
- x 为列表,y 为单个数字:
-
- x 为单个数字,y 为列表:
- x 为单个数字,y 为列表:
- x 和 y 为列表:
- 矩阵运算
学习机器学习,效率大大提升
- 生成初始矩阵
- 进行运算
不规则矩阵可以求伪逆矩阵:
2.6 array聚合运算
最大值,最小值,均值,方差,标准差此类计算
- 一维
中位数要用np.median()求得
- 二维
2.7 array arg索引运算
聚合运算求最小值,是先拿到对应值。arg索引运算,如果求最小值,是先拿到最小值对应的索引值
- 一维
- 二维
2.8 比较运算和FancyIndex
FancyIndex:既可以传输整数构建的数组,也可以构建布尔型构建的数组
-
一维
-
二维
【帮助我们更好的索引想要的数据,然后做相应处理和操作!数据预处理会大量用到该操作】
总结
1.Python随机生成100个随机整数
import random
# 生成10个 0-10 之间的随机整数 包括0和10
[random.randint(0,10) for i in range(10)]
2.Python与Numpy中如何使用乘法
- Numpy
- Python
使用循环