Numpy 入门

NumPy 入门

1. n 维数组对象 ndarray 入门

存在的意义:

  • 数组对象可以去除元素间运算所需的循环,使一维向量更像单个数据
  • 数组对象采用相同的数据类型,有助于节省运算和存储空间(底层采用 C 语言)

构成:

  • 实际存储的数据
  • 描述这些数据的元数据(维度、数据类型)
  • 所有元素类型相同,数组下标从 0 开始

操作:
生成数组 np.array()

import numpy as np

def npSum():
    a = np.array([1, 2, 3, 4])
    b = np.array([5, 6, 7, 8])
    c = a ** 2 + b ** 3
    
    return c

res = npSum()
res

array([126, 220, 352, 528], dtype=int32)

属性:

.axis: 保存数据的维度
.ndim(rank): 轴的数量
.shape: 对象尺寸,对于矩阵,n 行 m 列
.size: 对象元素的个数,相当于 n * m
.dtype: 元素类型
.itemsize: 每个元素的大小,以字节为单位

在这里插入图片描述

元素类型:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. ndarray 数组创建:

  • 从 Python 列表或元组创建:x = np.array(list/tuple, dtype=np.float32)
  • 使用函数创建:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
维度变换:

在这里插入图片描述

数据类型变换:

.astype(new_type) : 一定会创建一个新的拷贝数组,即使两个数据类型一致
.tolist() : 转换为 python 列表

对数组的操作:

  • 一维数组的索引,和 Python 中类似 a[id]
  • 一维数组的切片,和 Python 中类似 a[st: en: step]
  • 多维数组索引,a[ax1, ax2, ax3]
  • 多维数组的切片,a[st1: en1, st2: en2, st3: en3]

数组运算:

  • 与标量运算:数组中的每一个元素都与该标量运算
  • 一元函数:元素级运算,一般原数组都不改变
    在这里插入图片描述
    在这里插入图片描述
  • 二元函数
    在这里插入图片描述

3. Numpy 数据存取与函数

CSV 文件存取:只能存取一维和二维数组
  • 写: np.savetxt(frame, array, fmt=‘%.18e’, delimiter=None)
    • frame: 文件、字符串或产生器,可以是 .gz 或 .bz2 的压缩文件
    • array: 写入文件的数组
    • fmt: 写入文件的格式、如:%d %.2f %.18e
    • delimiter: 分割字符串,默认是任何空格
  • 读: np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)
    • unpack: 如果为 True,读入属性将分别写入不同变量
多维数据存取:

任意格式:维度等信息丢失

  • 写:a.tofile(frame, sep=‘’, format=‘%s’)
    • sep: 数据分割字符串,如果是空串,写入文件为二进制
    • 写入文件后,数组的维度信息丢失
  • 读:a.fromfile(frame, dtype=np.float, count=-1, sep=‘’)
    • count: 读入文件个数,-1 表示整个文件
    • 读出后的数组为一维数组,需要手动改变维度

Numpy 自定义的文件格式:保留维度等信息:数据用二进制存储,文件起始内容显示保存数组的其他信息

  • 写:np.save(fname, array) 或 np.savez(fname, array)
    参数:文件名称和数组名称
  • save 文件名为 .npy,savez 文件名为 .npz
    读:np.load(fname)

4. Numpy 随机数函数

import numpy.random.*

产生随机数:

  • rand(d0, d1, …, dn): 根据 d0-dn 创建随机数数组,浮点数,[0, 1),均匀分布
  • randn(d0, d1, …, dn): 标准正态分布
  • randint(low, [high, shape]): 创建随机整数或整数数组,范围是 [low, high),默认符合均匀分布
  • seed(s):随机数种子

随机排列:

  • shuffle(a): 根据数组 a 的第一轴进行随机排列,改变数组 a
  • permutation(a): 根据数组 a 的第一轴产生一个新的乱序数组,不改变数组 a
  • choice(a[, size, replave, p]): 从一维数组 a 中以概率 p 抽取元素,形成 size 形状新数组,replace 表示是否可以重用元素,默认为 True

分布函数:

  • uniform(low, high, size) 均匀分布
  • normal(loc, scale, size) 正态分布,loc 均值,scale 标准差
  • poisson(lam, size) 泊松分布,lam 随机事件发生率

Numpy 统计函数

在这里插入图片描述
在这里插入图片描述

a = np.arange(15).reshape(3, 5)
np.sum(a)

[0,1,2,3,4]
[5,6,7,8,9]
[10,11,12,13,14]
105

np.sum(a, axis=1) # 第一维度指 3,第二维度指 5
array([10, 35, 60])

np.mean(a)
7.0

np.mean(a, axis=0)
array([5., 6., 7., 8., 9.])

np.average(a, axis=0, weights=[10, 5, 1])
array([2.1875, 3.1875, 4.1875, 5.1875, 6.1875])

b = np.arange(15, 0, -1).reshape(3, 5)
np.max(b)
15

np.argmax(b) # 一维下标
0

np.unravel_index(np.argmax(b), b.shape) # 多维下标
(0, 0)

np.ptp(b)
14

np.median(b)
8.0

Numpy 梯度函数

np.gradient(f) :计算数组 f 中元素的梯度,当 f 为多维时,返回每个维度的梯度

  • 梯度:连续值之间的变化率,即斜率
  • 如 XY 坐标轴三个连续 X 坐标对应的 Y 轴值:a, b, c,其中,b 的 梯度是:(c-a)/2
a = np.random.randint(0, 20, (5))
a
array([14, 16,  0,  1,  6])


np.gradient(a) 
# 边界值和中间值计算方法不同
# 2 == 16 - 14
# -7 == (0 - 14) / 2
# -7.5 == (1 - 16) / 2
# 3 == (6 - 0) / 2
# 5 == 6 - 1
array([ 2. , -7. , -7.5,  3. ,  5. ])


c = np.random.randint(0, 50, (3, 5))
c
array([[11, 34, 27, 47, 48],
       [45, 17, 44, 37,  3],
       [47, 39, 19, 34, 31]])


np.gradient(c)
# 返回两个方向的梯度值
# 34 == 45 - 11  18 == (47 - 11) / 2 最外层维度的梯度值
# 23 == 34 - 11  8 == (27 - 11) / 2 第二层维度的梯度值
[array([[ 34. , -17. ,  17. , -10. , -45. ],
        [ 18. ,   2.5,  -4. ,  -6.5,  -8.5],
        [  2. ,  22. , -25. ,  -3. ,  28. ]]),
 array([[ 23. ,   8. ,   6.5,  10.5,   1. ],
        [-28. ,  -0.5,  10. , -20.5, -34. ],
        [ -8. , -14. ,  -2.5,   6. ,  -3. ]])]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值