首页 > 其他分享 >numpy

numpy

时间:2024-05-30 15:02:41浏览次数:13  
标签:运算 0.5 shape 数组 np numpy ndarray

Numpy(NumericalPython)是一个开源的Python科学计算库,用于快速处理任意维度的数组。

Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。

Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。

Numpy — 数值计算库

  • num — numerical 数值化的
  • py — python

ndarry

  • n — 任意个
  • d — dimension 维度
  • array — 数组

np.函数名

ndarry.方法名

一、ndarry

NumPy提供了一个N维数组类型ndarray,它描述了相同类型的“items"的集合。

用ndarray进行存储:

1. 优势
  • 存储风格

    • ndarray - 相同类型 - 通用性不强

    • list - 不同类型 - 通用性很强

  • 并行化运算

    • ndarray 支持向量化运算
  • 底层语言

    • Numpy 底层使用 C 语言编写,内部解除了 GIL(全局解释器锁),其对数组的操作速度不受 Python 解释器的限制,效率远高于纯 Python 代码。
2. 属性

数组属性反映了数组本身固有的信息

属性名字属性解释
ndarray.shape数组维度的元组
ndarray.ndim数组维数
ndarray.size数组中的元素数量
ndarray.itemsize一个数组元素的长度(字节)
ndarray.dtype数组元素的类型
3. ndarry的形状
a = np.array([[1,2,3],[4,5,6]])
b = np.array([1,2,3,4])
c = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])
a.shape		# (2,3)   二维数组
b.shape		# (4,)    一维数组
c.shape		# (2,2,3) 三维数组。有两个二维数组,每个二维数组里面嵌套了2个一维数组,每个一维数组中有3个元素

最外层有几个方括号就是几维的

4. 默认情况

在创建 ndarray 的时候,如果没有指定类型,默认:整数 int64/int32 浮点数 float64/float32

5. 生成数组的方法
  • 生成0和1的数组

    • np.zeros(shape=(3,4),dtype=“float32”)
    • np.ones(shape=[2,3],dtype=np.int64)
  • 从现有数组中生成

    • data1=np.array(score) # 深拷贝
    • data2=np.asarray(score) # 浅拷贝(score中的值改变,data2会跟着改变)
    • data3=np.copy(score) # 深拷贝
  • 生成固定范围的数组

    • np.linspace(0,10,5) # [0,10] 等距离的10个数
    • np.arange(0,10,5) # [0,10) 步长为5
6. 生成随机数组
  • 均匀分布

    • 均匀分布(UniformDistribution)是概率统计中的重要分布之一。顾名思义,均匀,表示可能性相等的含义。均匀分布在自然情况下极为罕见,而人工栽培的有一定株行距的植物群落即是均匀分布。
    • data1=np.random.uniform(-1,1,1000000) # [low,high)
  • 正态分布

    • 正态分布是一种概率分布。正态分布是具有两个参数u和o的连续型随机变量的分布,第一参数u是服从正态分布的随机变量的均值,第二个参数σ是此随机变量的标准差,所以正态分布记作N(u,σ)。
    • 标准差与方差的意义:可以理解成数据的一个离散程度的衡量
    • data2=np.random.normal(loc=1.75,scale=0.1,size=1000000) # loc:均值;scale:标准差
image-20240502204801659
7. 切片索引
stock_change[0,:3] 	# 获得第0的前3列
image-20240502211138950
8. 形状修改
  • stock_change.reshape(10,8) # 返回新的ndarry,原始数据没有改变。只是单纯按照新的形状的作切割。
  • stock_change.resize(10,8) # 没有返回值,对原始的ndarry进行了修改。只是单纯按照新的形状的作切割。
  • stock_change.T # 转置。行列互换
9. 类型修改
  • stock_change.astype(“int64”) # 修改类型为“int64”
  • stock_change.tobytes() # 序列化到本地
10. 数组的去重
  • 二维的去重:np.unique(ndarray)
  • 一维的去重:先使用ndarray.flatten()将ndarray转换为一维数组,然后使用set()去重。set(ndarray.flatten())

二、ndarry的运算

1. 逻辑运算

操作符合某一条件的数值

  • 布尔索引
ndarray > 0.5	# ndarray中大于0.5的为True,小于0.5的为False
ndarray[ndarray > 0.5]   # 输出大于0.5的项
ndarray[ndarray > 0.5] = 1.1   # 将大于0.5的项置为1.1
  • 通用判断函数
    • np.all(布尔值)
      • 只要有一个False就返回False,只有全是True才返回True
    • np.any(布尔值)
      • 只要有一个True就返回True,只有全是False才返回False
ndarray[0:2, 0:5] # 取出第0行—第1行 且 第0列—第4列的数据
ndarray[:5,:] # 选中前5行的数据
  • np.where() 三元运算符

    • np.where(布尔值,True的位置的值,False的位置的值)
      
  • 复合逻辑需要结合np.logical_and和np.logical_or使用

    • np.logical_and(ndarray>0.5,ndarray<1) # 判断ndarray中的值是否既大于0.5,且小于1
np.where(np.logical_or(ndarray>0.5,ndarray<-0.5),11,3)  # ndarray中的值,如果大于0.5或者小于-0.5,满足前述条件则将该项的值置为11,否则置为3
2. 统计运算
  • 统计指标函数

    最小值min
    最大值maxnp.max(a, axis=None, out=None, keepdims=False)
    平均值mean
    中位数median
    方差var
    标准差std

    np.amx(axis……)

    • 二维数组时,当axis=0时表示取每一列的最大值
    • 二维数组时,当axis=1时表示取每一行的最大值
    • 三维数组时,当axis=0、1、2…… 具体百度
  • 返回最大值、最小值的位置

    • np.argmax(tem,axis=)
    • np.argmin(tem,axis=)
4. 广播机制

广播(Broadcast)是numpy对不同形状(shape)的数组进行数值计算的方式,对数组的算术运算通常在相应的元素上进行。如果两个数组 a 和b 形状相同,即满足 a.shape ==b.shape,那么a*b的结果就是a与b数组对应位相乘。这要求维数相同,且各维度的长度相同。

为了进行广播,操作中两个数组的尾随轴的大小必须相同,或者其中一个必须是1。

image-20240506151316267 image-20240506151624035

image-20240506152421783image-20240506152529211

image-20240506151849087
5. 数组间运算
  • 数组与数的运算

    • 直接运算
    • ndarry +100 # 对ndarry中每个元素加10
  • 数组与数组的运算

  • 广播机制 broadcast

    • 执行 broadcast 的前提在于,两个 nadarray 执行的是 element-wise 的运算,Broadcast 机制的功能是为了方便不同形状的 ndarray(numpy 库的核心数据结构)进行数学运算。

      当操作两个数组时,numpy 会逐个比较它们的 shape(构成的元组 tuple),只有在下述情况下,两个数组才能够进行数组与数组的运算。

      • 维度相等
      • shape(其中相对应的一个地方为 1)
6. 矩阵运算

矩阵英文 matrix,和 array 的区别是:矩阵必须是 2 维的,但是 array 可以是多维的。

  • 存储矩阵

    • ndarray存储矩阵 np.array()
    • matrix存储矩阵 np.mat()
  • 运算规则:矩阵乘法规则(M 行,N 列)x (N 行,L 列) = (M 行,L 列)

    • A(2,3) B(3,2)
    • C = A * B C(2,2)

image-20240506153647251

  • 运算

    • 如果是用ndarray存储矩阵:

      • np.dot()
      • np.matmul()
      • ndarray @ ndarray
    • 如果是用matrix存储矩阵:

      • 直接相乘

标签:运算,0.5,shape,数组,np,numpy,ndarray
From: https://blog.csdn.net/qq_45874430/article/details/139323513

相关文章

  • NumPy 泊松分布模拟与 Seaborn 可视化技巧
    泊松分布简介泊松分布是一种离散概率分布,用于描述在给定时间间隔内随机事件发生的次数。它常用于模拟诸如客户到达商店、电话呼叫接入中心等事件。参数泊松分布用一个参数来定义:λ:事件发生的平均速率,表示在单位时间内事件发生的平均次数。公式泊松分布的概率质量函数(PMF)......
  • Numpy库的解析
    一些重要的性质:1.Numpy库创建一个数组,创建的数组的大小是无法改变的。2.数学中一维数据叫向量,二维数据叫做矩阵,三维数据叫做张量。在Numpy中每一个维度叫做轴。3.可以利用多维数组的.ndim属性查看数组有几个维度,可以使用.shape()看每一个轴的长度,可以使用size来查看两个轴......
  • 数据分析---numpy模块
    前戏NumPy(NumericalPython)是Python语言中做科学计算的基础库。重在于数值计算,也是大部分Python科学计算库的基础,多用于在大型、多维数组上执行的数值运算。快捷键的使用:添加cell:a或者b删除:x修改cell的模式:m:修改成markdown模式y:修改成code模式执行cell:shift+en......
  • NumPy 二项分布生成与 Seaborn 可视化技巧
    二项分布简介二项分布是一种离散概率分布,用于描述在固定次数的独立试验中,事件“成功”的次数的概率分布。它通常用于分析诸如抛硬币、做选择题等具有两个结果(成功或失败)的事件。参数二项分布用三个参数来定义:n:试验次数,表示重复相同实验的次数。p:每次试验中成功事件发生的概......
  • NumPy 正态分布与 Seaborn 可视化指南
    正态分布(高斯分布)简介正态分布(也称为高斯分布)是一种非常重要的概率分布,它描述了许多自然和人为现象的数据分布情况。正态分布的形状呈钟形,其峰值位于平均值处,两侧对称下降。特征正态分布可以用两个参数来完全描述:均值(μ):表示数据的平均值,分布的峰值位于μ处。标准差(σ):表示......
  • NumPy 随机数据分布与 Seaborn 可视化详解
    随机数据分布什么是数据分布?数据分布是指数据集中所有可能值出现的频率,并用概率来表示。它描述了数据取值的可能性。在统计学和数据科学中,数据分布是分析数据的重要基础。NumPy中的随机分布NumPy的random模块提供了多种方法来生成服从不同分布的随机数。生成离散分布随......
  • NumPy 数组排序、过滤与随机数生成详解
    NumPy数组排序排序数组排序数组意味着将元素按特定顺序排列。顺序可以是数字大小、字母顺序、升序或降序等。NumPy的ndarray对象提供了一个名为sort()的函数,用于对数组进行排序。示例:importnumpyasnparr=np.array([3,2,0,1])print(np.sort(arr))输出:[0......
  • Python数据分析numpy、pandas、matplotlib包
    Python数据分析numpy、pandas、matplotlib一、基础1.1notebook的一些配置快捷键:ctrl+enter执行单元格程序并且不跳转到下一行esc+L可以显示行号结果是打印的而没有返回任何的值就没有out1.2列表基础知识回顾b=[1,2.3,'a','b']b#列表中的元素允许各个元素不一样......
  • NumPy 分割与搜索数组详解
    NumPy分割数组NumPy提供了np.array_split()函数来分割数组,将一个数组拆分成多个较小的子数组。基本用法语法:np.array_split(array,indices_or_sections,axis=None)array:要分割的NumPy数组。indices_or_sections:指定分割位置的整数列表或要包含每个子数组的元素数......
  • NumPy 数组复制与视图详解
    NumPy数组的复制与视图NumPy数组的复制和视图是两种不同的方式来创建新数组,它们之间存在着重要的区别。复制复制会创建一个包含原始数组相同元素的新数组,但这两个数组拥有独立的内存空间。这意味着对复制进行的任何更改都不会影响原始数组,反之亦然。创建副本可以使用以下方......