【Python】Numpy简单复习

本人依据上课内容,将简单的numpy学习浓缩为一篇代码介绍。
本文适合已经有Numpy基础的人群做复习使用。

本文与2021/12/11首发于csdn,如有错误和不足请指出。

import numpy as np

'''1.数组创建'''
# (1)通过列表创建
x1 = [1, 2, 3, 4]
ary1 = np.array(x1)
# (2)通过arrage函数创建
ary2 = np.arange(0, 10, 2)
ary3 = np.arange(30).reshape(2, 3, 5)  # 两个三行五列的数组(三维数组)
# (3)数组属性
print("查看数组形状:", ary3.shape,
      "\n查看数组类型:", ary3.dtype,
      "\n查看数组元素个数:", ary3.size,
      "\n查看数组每个元素的字节大小:", ary3.itemsize,
      "\n查看数组维度:", ary3.ndim)
# print(len(ary3))  # 结果为2,因为类似于[a,b],a和b均为二维数组
# (4)其它创建数组的函数
ary4 = np.linspace(0, 1, 9)  # 等差数列,从0~1,9个元素,因为有八个间隔,所以增量为0.125
ary5 = np.zeros((2, 3), dtype=int)  # 全零矩阵,形状为(2,3),默认是浮点数显示,设置dtype可以去掉小数点
ary6 = np.ones(3)  # 全1矩阵
ary7 = np.ones_like(ary5)  # 创建一个形状和ary5一致的全1矩阵
ary8 = np.eye(3)  # 对角线全1矩阵(3行3列方阵)
ary9 = np.diag([1, 2, 3])  # 对角线矩阵,指定对角线元素为1,2,3
matr1 = np.mat("1 2 3;4 5 6;7 8 9")
matr2 = np.matrix([[123], [456], [789]])
# (5)生成随机数数组
ary10 = np.random.random((2, 3))  # [0,1)之间随机浮点数,只能有一个参数,要么输入元素个数要么输入(元组形式)元素形状
ary11 = np.random.rand(2, 3)  # [0,1)服从均匀分布的随机浮点数数列,输入参数为元素个数或直接输入形状
ary12 = np.random.randn(10)  # 服从正态分布的随机浮点数数列,参数输入同上
ary13 = np.random.randint(5, 10, size=[2, 5])  # [5,10]之间的随机整数,形状(2,3)
print(ary10)

'''2.数组访问'''
# 一维比较简单,不展示了
x2 = [[1, 2, 3],
      [4, 5, 6],
      [7, 8, 9]]
ary14 = np.array(x2)
# (1)索引
index1 = ary14[[0, 2], 0:2]  # 第0行,第2行,第0列到第1列
index2 = ary14[:, 2]  # 第2列
# (2)花式索引
index3 = ary14[[0, 2, 2, 1]]  # 第0,2,2,1行,注意一定要以列表形式写出
index4 = ary14[[0, 2], 0]  # 第0行第0列元素, 第2行第0列元素,前后是一一对应的
# 并不是[[1, 2], [4, 5]],而是[1, 5]
'''----这个一定要分清!----'''
index5 = ary14[[0, 1], [0, 1]]  # 第0行第0列元素, 第1行第1列元素[1, 5]
index6 = ary14[:2, :2]  # 这个才是第0,1行,第0,1列元素[[1, 2], [4, 5]]
# 布尔索引
index7 = [ary14[1, 2] > 3]  # 相当于是True
# [[False, False, False],
#  [ True,  True,  True],
#  [ True,  True,  True]]
index8 = [ary14 > 3]
print(ary14[ary14[1, 2] > 3])  # 一维
print(ary14[ary14 > 3])

'''3.数组转换'''
# 改变形状
ary15 = ary14.reshape(1, 9)  # 改成指定形状
ary16 = ary14.ravel()  # 矩阵展平(沿列(横向)变成一维ndarray数组)
ary17 = ary14.flatten()  # 沿列方向一一展平
ary18 = ary14.flatten('F')  # 沿行(纵向)方向一一展平
ary14.shape = (1, -1)  # 原矩阵改成制定N维矩阵,确定N-1维,余下部分写成-1让系统算
print(ary14)  # 将9个元素3*3的二维矩阵,确定为1维矩阵,余下部分系统算出为9

'''4.数组组合与组切割'''
ary19 = np.arange(12).reshape(3, 4)
ary20 = ary19*3
# (1)组合
ary_hstack = np.hstack((ary19, ary20))  # 横向(沿列)组合,同行数, horizon水平
ary_vstack = np.vstack((ary19, ary20))  # 纵向(沿行)组合,同列数, vertical垂直
ary_concatenate1 = np.concatenate((ary19, ary20), axis=1)  # 1,横向(沿列)组合,同行数
ary_concatenate0 = np.concatenate((ary19, ary20), axis=0)  # 0,横向(沿行)组合,同行数

ary_bmat = np.bmat("ary19, ary20")  # 横向组合
print(ary_hstack)
print(ary_bmat)
# (2)切割
ary_hsplit = np.hsplit(ary19, 2)  # 横向(列)之间切割,原为3*4数组,先分从中间为两个3*2数组
ary_vsplit = np.vsplit(ary19, 3)  # 纵向(行)之间切割,原为3*4数组,先分从中间为三个1*4数组
ary_split1 = np.split(ary19, 2, axis=1)  # 1横向(列)之间切割
ary_split0 = np.split(ary19, 3, axis=0)  # 0纵向(行)之间切割
print(ary_hsplit)

'''5.数组广播机制'''
# 只有存在维度相同的部分,或两者至少有一个维度为1的,才可以广播
broadcast1 = np.arange(3) + 5  # 5被扩为[[5,5,5],[5,5,5],[5,5,5]]
broadcast2 = np.ones((3, 3)) + np.arange(3)  # [0,1,2]扩为[[0,1,2],[0,1,2],[0,1,2]]
# [[0],[1],[2]]扩为[[0,0,0],[1,1,1],[2,2,2]],后面这个也扩展了
broadcast3 = np.arange(3).reshape((3, 1)) + np.arange(3)

'''6.数组统计分析'''
# (1)算术运算
math1 = ary20 + ary19  # 如无法达成广播机制,则只能同形状矩阵相加减乘(不是点乘)
math2 = ary20 - ary19
math3 = ary20 * ary19  # 单纯的同位置数字相乘
math4 = np.multiply(ary20, ary19)  # 同上
math5 = ary20[1:] / ary19[1:]  # 除
math6 = ary19 ** 2  # 幂

math7 = ary19 < ary20  # 布尔运算
math8 = ary19 != ary20
math9 = np.all(ary19 == ary20)  # 逻辑与(and),全部
math10 = np.any(ary19 == ary20)  # 逻辑或(or),任意
print(math9)
# (2)其它函数
np.random.seed(2)  # 设置随机种子
ary21 = np.random.randint(1, 10, size=(3, 3))
# sort排序
sort1 = np.sort(ary21)
print(sort1)
print(ary21)  # sort不是原地操作
# argsort排序下标
argsort1 = np.argsort(ary21)
print(argsort1)  # 返回原数组排序后的位置下标[3,9,8]返回[0,2,1]

# uniqe去重后排序
uniqe1 = np.unique(ary21)
print(uniqe1)  # 一维
# tile/repeat加重
ary22 = np.arange(4).reshape(2, 2)
# 横向,每个数组里面元素一起重复[[0 1][2 3]]变为[[0 1 0 1 ][2 3 2 3]]
tile1 = np.tile(ary22, 2)
# 自定义方向,按方向,各个元素各自重复
repeat1 = ary22.repeat(2, axis=1)  # [[0 1][2 3]] 2*2变为[[0 0 1 1][2 2 3 3]] 2*4
repeat2 = ary22.repeat(2, axis=0)  # [[0 1][2 3]] 2*2变为[[0 1][0 1][2 3][2 3]] 4*2
print(repeat2)
# (3)统计函数
# 无轴默认所有数字和
math11 = ary22.sum(axis=1)
math12 = ary22.mean(axis=1)
math13 = ary22.std()  # 标准差
math14 = ary22.var()  # 方差
math15 = ary22.min()  # 最小值,还有.max
math16 = ary22.argmin()  # 最小值元素索引,还有.argmax
math17 = ary22.cumsum(axis=1)  # 累加和,还有cumprod累乘积
print(math17)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值