NumPy

NumPy

NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。

目录
一、NumPy基础
二、NumPy数组
1.创建数组(从Python列表创建数组)
2.快速创建数组(通过函数创建数组)
3.创建随机数组
4.数组属性
5.NumPy数据类型
6.数据类型转换
7.数组索引
8.花哨索引
9.数组重新塑形
10.数组拼接
11.数组分裂
三、Numpy运算
1.算术运算
2.统计运算
3.数据选取
4.广播
5.矩阵运算
6.轴变换
四、数组的排序
五、NumPy结构化数组

一、NumPy基础

1.安装NumPy

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ numpy

2.库导入

import numpy as np

二、NumPy数组

<class 'numpy.ndarray'>

NumPy提供了一个N维数组的类型,即ndarray,它描述了相同类型的“items”的集合。 可以使用例如整数的N来索引项目(items)。

1.创建ndarray数组(从Python列表创建数组)

从Python列表创建

np.array(序列对象)

返回一个ndarray对象。
注意:ndarray中所有元素数据类型一致。
如果传入了拥有不同类型元素的列表,array方法会尝试自动转换。

2.快速创建数组(通过函数创建数组)

  • 1.创建数值为浮点0的数组
# 创建n_x维向量
dw = np.zeros((n_x,1))
# 创建m*n矩阵
matrix = np.zeros((m,n))
# 创建m*n*k张量
tensor = np.zeros((m,n,k))
  • 2.创建数值为浮点1的数组
np.ones()

示例:


  • 3.创建空数组(数据随机)
np.empty()
  • 4.创建指定值的数组
np.full(形状, 填充值)

示例:


  • 5.创建单位矩阵
np.eye(阶数)
  • 6.创建等差数列
np.arange(start, stop, step)
np.linspace(start, stop, num)

3.创建随机数组

伪随机数种子设置

np.random.seed(0)
  • 1.均匀分布
# 创建指定形状的数组(数值范围在0至1之间)
np.random.rand(形状)
np.random.random((形状))

# 创建指定范围内的一个数
np.random.uniform(a,b)
# 创建指定范围内的一个整数
np.random.randint(a,b)

示例:


  • 2.正态分布(高斯分布)
np.random.normal(loc=0.0, scale=1.0, size=None)

loc:μ,概率分布的均值。
scale:σ,概率分布的标准差。对应于分布的宽度,越大越矮胖,越小越瘦高。
size:返回数组的形状(标量、向量、矩阵、张量)。

快速生成高斯分布数组:

np.random.randn(形状)

4.数组属性

属性 说明
.size 数组元素个数
.shape 数组形状
.ndim 数组维度
.dtype 数组元素类型
.itemsize 每个元素的大小(单位:bytes)
.nbytes 整个数组的大小(单位:bytes)

5.NumPy数据类型

数据类型 类型代码 说明
int8 uint8 i1 u1 有符号/无符号8位(1字节)整型
int16 uint16 i2 u2 有符号/无符号16位(2字节)整型
int32 uint32 i3 u3 有符号/无符号32位(4字节)整型
float16 f2 半精度浮点型
float32 f4或f 标准单精度浮点型
float64 f8或d 双精度浮点型
bool ? 布尔类型
object O Python对象
unicode_ U 固定长度Unicode类型(字符串类型)

6.数据类型转换

new_array = origin_array.astype(np.数据类型)

注意:浮点型转整型会直接截断小数部分。
注意:astype是返回一个原数组的拷贝,而非对原数组做更改。

  • 含数字和小数点字符串可以转换为浮点型,不能直接转换为整型(可先转换为浮点型,再转换为整型)。
  • 仅含数字的字符串可以直接转换为整型。
    示例:


7.数组索引

(1)下标访问

可通过下标访问数组元素。

(2)切片

与python语法一致

array[start: stop: step]

多为数组切片

array[start: stop: step, start: stop: step, ......]

注意:通过切片选取后产生的数组是原数组的视图,而非数组的副本。
警告:修改切片会导致原始数组也被修改。

(3)拷贝副本

array_copy = array.copy()

8.花式索引(花哨索引)

花式索引(花哨索引):利用整数数组进行索引

(1)花哨索引

array[索引数组]

注意:利用花哨索引选出来的结果,与索引数组的形状保持一致,而非与被索引的数组保持一致。
示例:


  • 花哨索引也适用多维索引



    等效于选取选取x[0, 2], x[1, 1], x[2, 3]

(2)组合索引

组合索引:花哨索引和其他索引方式组合起来的索引方式

①花哨索引与普通索引组合使用


x[2,[0, 1, 2]]等效于选择x[2,0], x[2,1], x[2,2]

②花哨索引与切片组合使用

③花哨索引与掩码组合使用


选择第一列和第三列

(3)使用花哨索引修改值


x[[0, 0]] = [4, 6]等效于先执行x[0] = 4,后执行x[0] = 6

(4)使用花哨索引进行累加

at()函数

np.通用函数.at(被操作数, 操作数, 循环次数)

示例:


9.数组重新塑形

(1)reshape

arr.reshape((形状))

(2)newaxis

# 新建行轴
array[np.newaxis, :]
# 新建列轴
array[:, np.newaxis]

10.数组拼接

可以一次拼接两个以上的数组

np.concatenate([数组1, 数组2, 数组3, ......], axis=拼接轴)

简化版拼接函数
1.np.vstack():垂直栈
2.np.hstack():水平栈


11.数组分裂

np.split(array, [分割点1, 分割点2, ......])

示例:



简化版分割函数
1.np.vsplit():垂直分割
2.np.hsplit():水平分割
示例:


三、Numpy运算

1.算术运算

直接对ndarray对象进行算术运算操作,相当于对对象中的每个元素进行该算术运算操作。

运算符 通用函数 描述
+ np.add 加法运算
- np.substract 减法运算
- np.negative 负数运算
* np.multiply 乘法运算
/ np.divide 除法运算
// np.floor_divide 整除
** np.power 指数运算
% np.mod 模运算

示例:

matrix = np.random.normal(0,1,(3,3))
print(matrix)
print(matrix + 10)
print(matrix > 0.5)
运行结果

2.统计运算(算术聚合运算)

np.通用函数.reduce()
np.聚合函数(数组, axis=聚合维数)
函数名称 NaN安全版本 描述
np.sum np.nansum 计算所有元素的和
np.prod np.nanprod 计算所有元素的积
np.mean np.nanmean 计算所有元素的均值
np.std np.nanstd 计算所有元素的标准差
np.var np.nanvar 计算所有元素的方差
np.min np.nanmin 求所有元素的最小值
np.max np.nanmax 求所有元素的最大值
np.argmin np.nanargmin 求最小值索引
np.argmax np.nanargmax 求最大值索引
np.median np.nanmedian 求所有元素的中位数
np.percentile np.nanpercentile 计算基于元素排序的统计值
np.any N/A 验证是否有任何一个元素为真
np.all N/A 验证所有元素是否为真

3.数据选取

array[条件表达式]

(1)比较运算符

运算符 通用函数名称
== np.equal
!= np.notequal
< np.less
<= np.less_equal
> np.greater
>= np.greater_equal

(2)逻辑运算符

运算符 通用函数名称
& np.bitwise_and
| np.bitwise_or
~ np.bitwise_not
^ np.bitwise_xor

示例:


(3)掩码


可通过掩码数组选取数组元素(花哨索引)

array[掩码数组]

4.广播

广播(broadcasting)指的是不同形状的数组之间的算术运算的执行方式。
示例:


5.矩阵运算

np.dot(数组1, 数组2, out = None)

若两数组均为向量,则返回两向量的点积。
若两数组均为矩阵,则返回矩阵内积。

6.轴变换

(1)矩阵转置

array.T只适用于矩阵转置

array.T

(2)高维数组轴变换

  • 1.array.transpose()方法
    array.transpose()方法支持重新设置轴次序
array.transpose(轴次序)
  • 2.arr.swapaxes()方法
    arr.swapaxes()方法只接受一对轴的轴变换
arr.swapaxes(轴1, 轴2)

四、数组的排序

1.np.sort()

  • 1.生成副本
    np.sort()方法会生成一个副本返回。
np.sort(数组, axis=排序轴)
  • 2.就地排序
array.sort()

2.np.argsort()

np.argsort()方法返回排序后的索引
示例:


3.部分排序(分隔)

np.partition()方法排序后,最左边是数组中最小的k个值

np.partition(array, k)

示例:


五、NumPy结构化数组

1.定义结构化数组

'names':规定了数据的属性名
'formats':规定了对应属性的数据类型

data = np.zeros(元素个数, dtype={'names': ('变量名1', '变量名2', ......), 'formats': ('变量1数据类型', '变量2数据类型', ......)})
类型名 = np.dtype({'names': ('变量名1', '变量名2', ......), 'formats': ('变量1数据类型', '变量2数据类型', ......)})
np.zeros(元素个数, dtype=类型名)

数据类型

NumPy数据类型符号 描述 示例
'b' 字节型 np.dtype('b')
'i' 有符号整型 np.dtype('i4') == np.int32
'u' 无符号整型 np.dtype('u1') == np.uint8
'f' 浮点型 np.dtype('f8') == np.int64
'c' 复数浮点型 np.dtype('c16') == np.complex128
'S'或'a' 字符串 np.dtype('S5')
'U' Unicode编码字符串 np.dtype('U') == np.str_
'V' 原生数据,raw data(空,void) np.dtype('V') == np.void

2.填充值

data['键'] = 列表

示例:

data = np.zeros(4, dtype={'names': ('name', 'age', 'weight'), 'formats': ('U10', 'i4', 'f8')})
name = ['Alice', 'Bob', 'Cathy', 'Doug']
age = [25, 45, 37, 19]
weight = [55.0, 85.5, 68.0, 61.5]
data['name'] = name
data['age'] = age
data['weight'] = weight

3.查询

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容