Numpy常用操作(一)

news/2025/2/22 13:18:29/

为什么使用Numpy?
Numpy是Python的基础,更是数据科学的通用语言,且与TensorFlow关系密切,Python本身支持list和 tuple的数据存储,但这些数据结构有很多不足,因列表的元素可以为任意对象,因此列表中所保存的是对象的指针,即使像保存简单的列表[1, 2, 3]都需要有3个指针和3个整数对象,在执行过程中会浪费cpu和内存,tuple 直接保存元素,类似于C语言中的一维数组,但不支持多维,也不支持不同类型的运算函数,因为也不适合做数值运算。因此出现了Numpy 来弥补list和tuple的不足,存在ndarray和ufunc两种基本对象,ndarray是存储单一数据类型的多维数组;ufunc能够对数据进行处理的函数。

Numpy的主要特点

  1. ndarray 快速,节省空间的多维数组。提供数组化的算术运算和高级的广播功能
  2. 使用标准的数学函数对整个数据组进行快速运算,不需要循环处理
  3. 读写磁盘上的阵列数据和操作存储器映像文件的工具
  4. 线性代数,随机数生成,以及傅里叶变换的能力

生成ndarray的几种方式

(一)从已有数据中创建
直接对python的基础数据类型(eg: 列表、元组)进行转换生成ndarray
列表,嵌套列表转换

import numpy as nplist_1 = [1, 2, 3, 4, 5, 6]
np1 = np.array(list_1)
print(np1)  # [1 2 3 4 5 6]list_2 = [[1, 2, 3, 4, 5, 6], [7, 8, 9, 0, 11, 12]]
np2 = np.array(list_2)
print(np2)  # [[ 1  2  3  4  5  6] [ 7  8  9  0 11 12]]

(二) 利用random生成
random模块分为多种函数: random生成0~1的随机数,uniform生成均匀分布随机数、randn生成标准正态的随机数、normal生成正态分布、shuffle 随机打乱顺序、seed 设置随机数种子等。

import numpy as np
np.random.seed(123)  # 如果使用相同的seed()值,则每次生成的随机数都相同,如果不设置这个值,那么每次生成的随机数不同,并且每次只能seed一次
nd_1 = np.random.randn(2,3)
print(nd_1)

(三)创建特定形状的多维数组
数据初始化时,需要生成特殊矩阵,如0或1得数组或矩阵,使用np.zeros, np.ones, np.diag等实现

import numpy as npnp_1 = np.zeros([3,3])  # 3X3的矩阵   0
print(np_1)
np_2 = np.ones([3,3])  # 3X3的矩阵  1
print(np_2)
np_3 = np.eye(3)  # 3阶单位矩阵
print(np_3)
np_4 = np.diag([1, 2, 3])  # 3阶对角矩阵
print(np_4)
# 数据保存到本地磁盘
np_5 = np.random.random([5,5])
np.savetxt(X=np_5, fname="1.txt")
np_10 = np.loadtxt("1.txt")
print(np_10)

(四)利用arange函数
arange是numpy模块中的常用函数,其格式为: arange(start,stop, step, dtype)
start: 起始数值 stop: 结束数值 step: 步长 可以为小数

import numpy as npnp_1 = np.arange(10)
print(np_1)
np_2 = np.arange(0,10)
print(np_2)
np_3 = np.arange(1, 4, 0.5)
print(np_3)
np_4 = np.arange(9 , -1, -1)
print(np_4)

读取元素
以下是常用获取矩阵元素的方式

import numpy as npnp.random.seed(2018)
np_1 = np.random.random(10)
print(np_1[3])  # 获取第四个元素
print(np_1[3:6])  # 获取第四位到第六位的元素
print(np_1[1:6:2]) # 获取第一位到第五位 每隔两个位置的元素
print(np_1[::-2])  # 倒叙取数
# 截取一个多维数组的一个区域内数据
np_2 = np.arange(25).reshape([5,5])
np_3 = np_2[1:3, 1:3]
print(np_3)
# 截取一个多维数组中,数值在某一个值域之内的数据
print(np_2[(np_2>3)&(np_2 < 10)])
# 获取指定行的数值
print(np_2[[1,2]])
# 获取指定列的数值
print(np_2[:, 1:3])

获取数组中的部分元素除了通过指定索引标签外,还可以使用一些函数实现,例如使用random.choice函数从指定的样本中随机抽取数据

import numpy as np
from numpy import random as nrnp_1 = np.arange(1, 25, dtype=float)
np_2 = nr.choice(np_1, size=(3,4))  #size指定形状
print(np_2)
# replace = True 默认为True False表示不能重复。即False表示不放回取样,True表示放回取样
np_3= nr.choice(np_1, size=(3, 4), replace=False)
print(np_3)
# p代表每个元素抽中的概率,默认每个元素抽中的概率相同
np_4 = nr.choice(np_1, size=(3,4), p= np_1 / np.sum(np_1))
print(np_4)

补充

import numpy as np# full:创建一个单独值的n维数组。fill_value:填充值。
print(np.full((2, 4), fill_value=2))
# linspace:创建一个具有指定间隔的浮点的数组
print(np.linspace(10, 100, 10))# min返回最小值
print(np.min(np.array([i for i in range(100)])))# max返回最大值  mean: 返回平均值    medain: 返回中位数
print(np.max(np.array([i for i in range(100)])))
# sort对数组排序
print(np.sort(np.array([3,4,1, 2, 6,5])))
# abs 返回数组中元素的绝对值
print(np.abs([[1,-3, 4], [-2, -4, 3]]))
# union1d将两个数组合并为一个
print(np.union1d(np.array([1,2,3,4,5]), np.array([6, 7, 8,9, 10])))
# 重复元素,3代表次数
print(np.repeat('00', 3))
# unique: 返回一个所有唯一元素排序的数组
# return_index:如果为True,返回数组的索引
# return_inverse:如果为True,返回唯一数组的下标
# return_counts:如果为True,返回数组中每个唯一元素出现的次数
# axis:要操作的轴。默认情况下,数组被认为是扁平的。
print(np.unique(np.array([1, 2, 3, 4, 5]), return_counts=True))

http://www.ppmy.cn/news/6992.html

相关文章

大话测试数据(一)

导读&#xff1a;测试数据的准备至关重要&#xff0c;无论是手工测试还是自动化测试都要以良好的测试数据准备为基础。本文为霍格沃兹测试学院特邀嘉宾&#xff0c;某互联网巨头企业资深测试技术专家刘晓光&#xff08;skytraveler&#xff09;老师对测试数据管理实践的思考总结…

Linux 管理联网 配置静态解析 域名解析

问题引入 # 我们平时在网址栏访问网址的时候&#xff0c; 比如 &#xff1a; 访问 百度 的时候&#xff0c;是怎样访问的 &#xff1f; >>> 那是不是就是在 地址栏 我们输入 www.baidu.com 随后就跳转到 百度的页面去了~&#xff01; 但实际是 &#xff1a; >&g…

经营报表-FineReport配置Oracle外接数据库(2)

1. 配置外接数据库 1.1 外接数据库配置入口 外接数据库的配置入口&#xff0c;有三种形式&#xff1a; 1&#xff09;超级管理员第一次登录数据决策系统时&#xff0c;即可为系统配置外接数据库。如下图所示&#xff1a; 2&#xff09;对于使用内置数据库的系统&#xff0c;管…

【OpenCV-Python】教程:8-2 图像修复 Image Inpainting

OpenCV Python 图像修复 【目标】 去除小噪声和笔画等&#xff1b; 【理论】 大多数人家里都会有一些旧照片&#xff0c;上面有一些黑点&#xff0c;一些笔画等。你想过把它修复回来吗?我们不能简单地在油漆工具中删除它们&#xff0c;因为它只会用白色结构取代黑色结构&a…

4.移动端布局-flex布局**

1、传统布局和flex布局 传统布局&#xff1a;PC端 兼容性好布局繁琐局限性&#xff0c;不能在移动端很好的布局 flex布局&#xff1a;PC端、移动端操作方便&#xff0c;布局简单&#xff0c;移动端应用广泛PC端浏览器支持情况较差IE11或更低版本&#xff0c;不支持或仅部分支…

深度学习02:损失函数总结

目录 nn.L1Loss: nn.NLLLoss: nn.MSELoss: nn.CrossEntropyLoss: 损失函数是用来估量模型的预测值与真实值的不一致程度&#xff0c;它是一个非负实值函数。我们训练模型的过程&#xff0c;就是通过不断的迭代计算&#xff0c;使用梯度下降的优化算法&#xff0c;使得损失函…

【JavaScript】ES6模块化开发

文章目录一. 模块化的意义二. ES6 模块化讲解定义模块&#xff1a;导入模块&#xff1a;配置模块&#xff1a;HTML页面加载规则一. 模块化的意义 函数编程---->闭包---->命名空间---->模块化编程 模块化的意义–冲突和依赖 模块化思想 就是指将页面根据内容的关联性…

PostgreSQL数据库TableAM——Table scan callbacks

TableAM Table scan TableAM提供了如下4个接口用于实现表数据的扫描功能。scan_begin函数的形参nkeys不为零&#xff0c;则扫描结果需要根据scan keys先进行过滤&#xff1b;pscan如果不为null&#xff0c;说明该结构体已经由parallelscan_initialize初始化过了(仅仅在table_b…