Python科学计算应用基础之Numpy


前言

  • Python四种基本数据结构类型

List,Tuple,Set,Dict

  • Numpy的数据结构类型

Ndarry(多维数组)

在介绍Numpy之前,先说一下Jupyter Notebook,这是一款数据分析玩家必用的工具,其风格跟我们以往用过的软件开发IDE有很大的不同。

这里简单说一下,Data Science IDE和Code Develop IDE的有什么不同:
在这里插入图片描述

  • 安装jupyter

pip install jupyter

工作目录下输入,jupyter notebook,就会启动浏览器,进入进入工作界面:
在这里插入图片描述

在此介绍一种我常用的进入工作目录的方式:

  1. 鼠标点击进入工作目录
  2. 在文件路径处输入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)

在这里插入图片描述

  1. 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进行数据转换
    在这里插入图片描述
  1. 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 函数

代码如下(示例):

  1. np.zeros 生成全0矩阵
  • 一维
    在这里插入图片描述在这里插入图片描述
  • 二维 (必须输入元组
    在这里插入图片描述
    在这里插入图片描述
  1. np.ones 生成全1矩阵
  • 一维
    在这里插入图片描述
  • 二维
    在这里插入图片描述
  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 为单个数字:
    在这里插入图片描述
    1. x 为列表,y 为单个数字:
      在这里插入图片描述
    1. x 为单个数字,y 为列表:
      在这里插入图片描述
  • x 和 y 为列表:
    在这里插入图片描述
  • 矩阵运算

学习机器学习,效率大大提升

  1. 生成初始矩阵
    在这里插入图片描述
  2. 进行运算
    在这里插入图片描述
    不规则矩阵可以求伪逆矩阵:
    在这里插入图片描述

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
    使用循环

猜你喜欢

转载自blog.csdn.net/HG0724/article/details/113275946
今日推荐