返回顶部
首页 > 资讯 > 后端开发 > Python >玩数据必备Python库之numpy使用详解
  • 516
分享到

玩数据必备Python库之numpy使用详解

2024-04-02 19:04:59 516人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言1. ndarray介绍2. ndarray的基本操作生成数组数组索引、切片修改数组形状修改数组类型数组去重删除元素3. ndarray运算逻辑运算统计运算数组运算4. ma

前言

numpy 库是 一个科学计算库, 使用方法:import numpy as np

  • 用于快速处理任意维度的数组,存储的对象是ndarray
  • 用于矩阵运算,存储的对象是matrix

1. ndarray介绍

1. ndarray的属性

item = np.array([[1, 2], [3, 4], [5, 6]])
# ndarray的属性
print('shape 表示数组维度的元组', item.shape)  # (3, 2)
print('ndim 表示数组维数', item.ndim)  # 2
print('size 表示数组中元素个数', item.size)  # 6
print('itemsize 表示一个元素所占字节大小', item.itemsize)  # 4
print('dtype 表示数字元素的类型', item.dtype)  # int32

2. ndarray的形状

ndarray可以是任意维度的数组

# ndarray的形状
a1 = np.array([1, 2])
a2 = np.array([[1, 2], [3, 4]])
a3 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print('a1是{0}维数组'.fORMat(a1.ndim))
print('a2是{0}维数组'.format(a2.ndim))
print('a3是{0}维数组'.format(a3.ndim))
# a1是1维数组
# a2是2维数组
# a3是3维数组

3. ndarray的类型

创建ndarray对象时,可以使用dtype参数指定ndarray的类型

# ndarray的类型
item = np.array([[1, 2], [3, 4]], dtype=np.str_)	# 设置类型为字符串
print(item)
#[['1' '2']
# ['3' '4']]

2. ndarray的基本操作

生成数组

1. 生成0和1数组

# 生成一个3行4列的数组,元素为0。注意:默认类型为浮点型 0.
arr_zero = np.zeros([3, 4], dtype=int)
# 生成一个3行4列的数组,元素为1
arr_one = np.ones_like(arr_zero)

2. 从现有数组生成

array()

a = np.array([[1, 2, 3], [4, 5, 6]])
array = np.array(a)
print(array)

asarray()

asarray = np.asarray(a)
print(asarray)

array()和asarray()的区别

a[0, 0] = 100   # 修改元素值
print(array)    # array是深拷贝,修改原数据,现数据不变。相当于复制
print(asarray)  # asarray是浅拷贝,修改原数据,现数据改变。相当于创建快捷方式
# [[1 2 3]
#  [4 5 6]]
# [[100   2   3]
#  [  4   5   6]]

3. 生成固定范围的数组

linspace(start, stop, num, endpoint) 固定个数,步长相等

# 从0到100,生成11个元素,默认包含stop值100,endpoint=True
arr = np.linspace(0, 100, 11)
print(arr)
# [  0.  10.  20.  30.  40.  50.  60.  70.  80.  90. 100.]

arange(start, stop, step, dtype) 固定步长

# 从0到50,固定步长10生成int类型元素,不包括stop值
arr2 = np.arange(0, 50, 10, np.int32)
print(arr2)
# [ 0 10 20 30 40]

logspace(start, stop, num) 生成10的N次幂的数据

# 从10^0开始到10^3结束,生成4个元素
arr3 = np.logspace(0, 3, 4)
print(arr3)
# [   1.   10.  100. 1000.]

4. 生成随机数组 np.random模块

4.1. 均匀分布生成

rand(d0, d1, … , dn) 返回一个[0.0, 1.0)内的一组均匀分布的数据

a1 = np.random.rand(2, 3)   
print(a1)

uniform(low, high, size) 从一个均匀分布[low, high)中随机采样,可替代rand()方法 常用

a2 = np.random.uniform(1, 10, (2, 3))
print(a2)

randint(low, high, size) 从一个均匀分布[low, high)中随机采样,生成N维整数数组

a3 = np.random.randint(1, 10, (2, 3))
print(a3)

生成均匀分布数据的小案例

import matplotlib.pyplot as plt

# 1.准备数据 在[0,1)范围内生成 100000000 个数据
x = np.random.uniform(0, 1, 100000000)
# 2.画布
plt.figure(figsize=(20,8), dpi=100)
# 3.绘制 x为数据, bins是要划分的区间数
plt.hist(x=x, bins=1000)
# 4.显示
plt.show()

数据分布如图所示:

4.2. 正态分布生成

randn(d0, d1, … , dn) 从标准正态分布中返回一个或多个样本值

a1 = np.random.randn(2, 3)   
print(a1)

normal(loc, scale, size) loc均值,scale标准差,默认size=None,返回一个值 常用

a2 = np.random.normal(1.75, 1, (2, 3))
print(a2)

standard_normal(size) 返回指定形状的标准正态分布的数组

a3 = np.random.standard_normal((2, 3))
print(a3)

生成正态分布数据的小案例

# 1.准备数据
x = np.random.normal(1.75, 1, 100000000)
# 2.画布
plt.figure(figsize=(20,8), dpi=100)
# 3.绘制 x为数据, bins是要划分的区间数
plt.hist(x=x, bins=1000)
# 4.显示
plt.show()

数据分布如图所示:

数组索引、切片

  • 直接索引,先对行索引,再对列索引
  • 高维数组索引,从宏观到微观
# 生成一个5行4列的随机数组,范围在40~100
score = np.random.randint(40, 100, (5, 4))
print(score)
# 获取第一行,第三列的值
print(score[0, 2])
# 获取前两行,前三列的值,注意切片是[),左闭右开
print(score[0:2, 0:3])

修改数组形状

reshape(shape[,order]) 返回一个新数组,原数组不变,行列顺序不变

# 生成一个4行5列的随机数组,范围在40~100
score = np.random.randint(40, 100, (4, 5))
# 将数组修改为5行4列
a1 = score.reshape([5, 4])
print(a1)
# 若行为-1,表示行不固定,根据列的大小修改,但必须保证列的大小是总数的一个因数,否则会报错
a2 = score.reshape([-1, 10])    # 元素总数为20,[-1, 10]表示 20/10 修改为2行10列
print(a2)

resize(shape[,order]) 无返回,改变原数组,行列顺序不变

# 将数组修改为5行4列
score.resize([5, 4])
print(score)

T 返回一个新数组,原数组不变,行列顺序改变

print(score.T)

修改数组类型

astype(dtype)

# 生成一个4行5列的随机数组,范围在[1,5) 类型为浮点型
score = np.random.uniform(1, 5, (4, 5))
# 修改数组类型为int
print(score.astype(np.int_))

数组去重

np.unique()

arr = np.array([[1, 2, 3, 4], [3, 4, 5, 6]])
print(np.unique(arr))
# [1 2 3 4 5 6]

删除元素

np.delete(arr,obj,axis)

  • arr:ndarray数组
  • obj:删除元素的位置或者条件
  • axis:指定删除行或者列

3. ndarray运算

逻辑运算

  • 大于、小于直接进行比较
  • bool赋值,通过布尔索引进行赋值
arr = np.random.normal(0.75, 1, (3, 4))
print(arr)
# 逻辑判断 如果值大于0,标记为True,否则为False
print(arr > 0)  # 大于、小于 直接进行比较
# bool赋值,通过布尔索引进行赋值
arr[arr > 0] = 2    # 将大于0的元素赋值为2
print(arr)
# [[ 1.61640357 -0.21286798  0.67147044  1.07099177]
#  [ 0.87844707 -0.30592255  2.51825124 -0.53368643]
#  [ 0.85427772 -1.21688459 -0.81051012  0.77601911]]
# [[ True False  True  True]
#  [ True False  True False]
#  [ True False False  True]]
# [[ 2.         -0.21286798  2.          2.        ]
#  [ 2.         -0.30592255  2.         -0.53368643]
#  [ 2.         -1.21688459 -0.81051012  2.        ]]

通用判断函数

  • np.all() 所有元素都满足才会返回True
  • np.any() 任何一个元素满足都会返回True
# 通用判断函数
arr = np.random.normal(0.75, 1, (3, 4))
print(arr)
# np.all()  所有元素都满足才会返回True
print(np.all(arr > 0))
# np.any()  任何一个元素满足都会返回True
print(np.any(arr > 0))

# [[ 2.96745424  1.13869564  2.42304826  1.00264569]
#  [ 1.09160352  1.67433992  0.80692908  0.87226686]
#  [-0.11395954 -0.10808592  2.67034408  1.06746313]]
# False
# True

三元运算符

  • np.where(表达式, value1, value2) 表达式为True,执行value1, 否则执行value2
  • 复合逻辑需要结合 np.logical_and() 或 np.logical_or() 使用
# 三元运算符
arr = np.random.normal(0.75, 1, (3, 4))
print(arr)
# np.where(表达式, value1, value2)     表达式为True,执行value1, 否则执行value2
print(np.where(arr > 0, 1, 0))
# 复合逻辑需要结合 np.logical_and() 或 np.logical_or() 使用
print(np.where(np.logical_and(arr > 0.5, arr < 1), 1, 0))   # 大于0.5并且小于1
print(np.where(np.logical_or(arr > 0.5, arr < -0.5), 1, 0))   # 大于0.5或者小于-0.5
# [[-0.55217725  1.50314214  0.35100255  1.76121231]
#  [-0.47892572  1.7304177   1.19885493  0.28415964]
#  [ 0.83477297  0.76201994  0.40926624  0.95691155]]
# [[0 1 1 1]
#  [0 1 1 1]
#  [1 1 1 1]]
# [[0 0 0 0]
#  [0 0 0 0]
#  [1 1 0 1]]
# [[1 1 0 1]
#  [0 1 1 0]
#  [1 1 0 1]]

统计运算

  • min() 最小值
  • max() 最大值
  • mean() 均值
  • std() 标准差
  • var() 方差
  • argmin() 最小值的下标
  • argmax() 最大值的下标

统计时,还可以指定统计轴axis(行或者列),在每个轴上进行统计, axis轴的取值并不固定,在本例中,axis 0表示列,1表示行

arr = np.random.normal(0.75, 1, (3, 4))
print(arr)
print(np.max(arr))  # 最大值
print(np.max(arr, axis=1))  # 每行的最大值
# [[ 0.25961034  0.56145924  0.71150806 -0.17447214]
#  [ 0.70701591 -0.16176053  0.24923484  0.48678436]
#  [ 1.21328659 -0.15891988  1.69161668  1.42672955]]
# 1.6916166794484437
# [0.71150806 0.70701591 1.69161668]

数组运算

数组与标量运算

对应元素直接进行运算

arr = np.array([1, 0, 5])
print(arr)
print(arr + 2)
print(arr * 2)
# [1 0 5]
# [3 2 7]
# [ 2  0 10]

数组与数组运算

数组之间的运算需要满足广播机制才可以运算,两个条件

  • 维度相等
  • shape(其中相对应的一个地方为1)

条件可以表示为:

可以运算:
A       (3D array): 5 x 4 x 7
B       (3d array): 5 x 1 x 1
Result  (3d array): 5 x 4 x 7

A       (4d array): 9 x 1 x 7 x 1
B       (3d array):     8 x 1 x 5
Result  (4d array): 9 x 8 x 7 x 5

A       (2d array): 5 x 4
B       (1d array):     1
Result  (2d array): 5 x 4

不可以运算:
A       (1d array): 10
B       (1d array): 12
A       (2d array): 2 x 1
B       (3d array): 4 x 3 x 2
arr = np.array([1, 0, 5])
arr2 = np.array([2, 1, 1, 4])
print(arr + arr2)
# ValueError: operands could not be broadcast together with shapes (3,) (4,)

a = np.array([[1, 2, 3, 2, 1, 4]])  # A         (2d array):     1 x 6
b = np.array([[[1], [3], [4]]])     # B         (3d array): 1 x 3 x 1
                                    # Result    (3d array): 1 x 3 x 6
print(a + b , '新数组的shade是{}'.format((a+b).shape))
# [[[2 3 4 3 2 5]
#   [4 5 6 5 4 7]
#   [5 6 7 6 5 8]]] 新数组的shade是(1, 3, 6)

4. matrix 矩阵介绍

矩阵和向量

矩阵(matrix),和数组的区别:矩阵只能是二维的,数组可以是多维的

向量:向量是一种特殊的矩阵,一般都是列向量

加法和常量乘法

矩阵的加法:行列数相等才能相加

矩阵的常量乘法:每个元素都要乘

矩阵间的乘法

两个矩阵相乘,只有第一个矩阵的列数等于第二个矩阵的行数才能相乘,即:(M行,N列) × (N行,L列) = (M行,L列)

矩阵乘法的性质

(1) 结合律: (AB)C=A(BC)

(2) 分配律:(左分配律)C(A+B)=CA+CB
        (右分配律)(A+B)C=AC+BC

(3) 对常量的结合性:k(AB)=(kA)B=A(kB)

单位矩阵

  • 从左上角到右下角的对角线均为1,其余元素都为0的矩阵

逆矩阵

  • 矩阵A × 矩阵B = 单位矩阵,则A和B互为逆矩阵

转置矩阵

  • 行和列互换的矩阵

5. Python中矩阵运算

  • np.matmul() 两个矩阵相乘
  • np.dot() 两个矩阵相乘或者矩阵与标量相乘
arr1 = np.random.randint(1, 7, (3, 2)) # 3 x 2 矩阵
arr2 = np.random.randint(2, 5, (2, 4)) # 2 x 4 矩阵
print(arr1)
print(arr2)
print(np.matmul(arr1, arr2))  # 结果为 3 x 4 矩阵
# print(np.dot(arr1, arr2))

# np.dot() 支持与标量相乘
print(np.dot(arr1, 5))  # 结果为 3 x 2 矩阵
# [[6 5]
#  [2 1]
#  [5 1]]
# [[2 2 3 4]
#  [4 2 3 2]]
# [[32 22 33 34]
#  [ 8  6  9 10]
#  [14 12 18 22]]
# [[30 25]
#  [10  5]
#  [25  5]]

扩展:正态分布简介

正态分布是一种概率分布。正态分布是具有两个参数μ和σ²的连续型随机变量的分布,第一参数μ是服从正态分布的随机变量的均值,第二个参数σ²是此随机变量的方差,所以正态分布记作N(μ,σ²)

正态分布图

均值:图形的左右位置

方差:图形是瘦还是胖

  • 方差越小,图形越瘦高,数据越集中
  • 方差越大,图形越矮胖,数据越分散

方差

  • 方差是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。

总结

到此这篇关于玩数据必备Python库之numpy使用详解的文章就介绍到这了,更多相关Python库之numpy使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 玩数据必备Python库之numpy使用详解

本文链接: https://lsjlt.com/news/138664.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 玩数据必备Python库之numpy使用详解
    目录前言1. ndarray介绍2. ndarray的基本操作生成数组数组索引、切片修改数组形状修改数组类型数组去重删除元素3. ndarray运算逻辑运算统计运算数组运算4. ma...
    99+
    2024-04-02
  • Python数据分析之Numpy库的使用详解
    目录前言🧡Numpy库介绍💙ndarray 类常用属性💚Numpy常用函数🍓array函数🥝arang...
    99+
    2024-04-02
  • Python必备技巧之函数的使用详解
    目录1.如何用函数2.默认参数陷阱2.1针对可变数据类型,不可变不受影响3.名称空间和作用域4.闭包函数5.函数的参数5.1定义阶段5.2调用阶段6.装饰器:闭包函数的应用6.1装饰...
    99+
    2024-04-02
  • Python数据分析之NumPy常用函数使用详解
    目录文件读入1、保存或创建新文件 2、读取csv文件的函数loadtxt3、常见的函数4、股票的收益率等5、对数收益与波动率6、日期分析总结本篇我们将以分析历史股价为例,介...
    99+
    2024-04-02
  • Python必备技巧之字符数据操作详解
    目录字符串操作字符串 + 运算符字符串 * 运算符字符串 in 运算符内置字符串函数字符串索引字符串切片字符串切片中的步幅将变量插入字符串修改字符串内置字符串方法bytes对象定义文...
    99+
    2024-04-02
  • 数据库CURD必备搭档mybatis plus详解
    目录一、什么是mybatis-plus二、特性三、试一试1.建库、建表、建数据2.idea中创建工程、配置3.配置数据库4.编写准备代码entity包下的user.javamappe...
    99+
    2024-04-02
  • Java开发者必备:NumPy库和NPM包详解?
    Java开发者必备:NumPy库和NPM包详解 作为一名Java开发者,你可能已经听说过NumPy库和NPM包。这两个工具在不同的领域中都有着广泛的应用,而且在Java开发中也有着不可替代的地位。本文将详细介绍NumPy库和NPM包的相关知...
    99+
    2023-10-30
    numy 关键字 npm
  • 大数据处理必备!Java API中NumPy库的详细介绍!
    在当今信息化时代,数据已经成为了企业发展的重要资源。大数据的处理和分析也成为了许多企业必须面对的问题。在这种情况下,NumPy库成为了数据处理的重要工具之一。本文将详细介绍NumPy库在Java API中的应用。 一、NumPy库简介 N...
    99+
    2023-09-10
    api numy 大数据
  • Python爬虫必备之XPath解析库
    目录一、简介二、安装三、节点3.1 选取节点3.2 选取未知节点3.3 节点关系四、XPath实例一、简介 XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历...
    99+
    2022-06-02
    XPath解析库的使用 Python Xpath
  • MySQL学习之数据库备份详解
    目录1.DB,DBMS,SQL2.数据库的特点3.SQL分类4.mysql两种启动关闭方式5.mysql的登录方式()6.SQL语言规范7.navicat常用快捷键8.数据库的备份和...
    99+
    2024-04-02
  • python数据库操作指南之PyMysql使用详解
    目录Pymysql使用详解安装使用连接数据库操作数据库总结PyMysql使用详解 在编写小脚本时,PyMysql是快速连接并操作数据库的一个不错选择。 安装 pip3 install PyMysql # 可使用 pip ...
    99+
    2023-03-02
    pymysql使用教程 pymysql用法 pymysql怎么用
  • Python必备技巧之字典(Dictionary)详解
    目录定义字典字典的访问字典键与列表索引增量构建字典字典键的限制字典值的限制运算符和内置函数内置字典方法Python中的字典由于是对象的集合属于复合数据类型,类似于列表。 定义字典 ...
    99+
    2024-04-02
  • MySQL数据库入门之备份数据库操作详解
    本文实例讲述了MySQL数据库入门之备份数据库操作。分享给大家供大家参考,具体如下: 接上一次:MySQL数据库入门多实例配置 一提到数据,大家神经都会很紧张,数据的类型有很多种,但是总归一点,数据很重要,非常重要,...
    99+
    2022-05-16
    MySQL 数据库 备份数据库
  • python必备库Matplotlib怎么使用
    本篇内容介绍了“python必备库Matplotlib怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言:Matplotlib 通常...
    99+
    2023-06-29
  • NumPy 玩转数据:解锁 Python 的数据处理潜能
    NumPy 是一款用于 Python 的强大开源库,专为多维数据操作和数值计算而设计。它提供了一系列灵活且高效的工具,使开发者能够轻松处理复杂的数据集。 核心功能 多维数组: NumPy 的核心数据结构是多维数组,称为 ndarray。...
    99+
    2024-04-02
  • 实时数据分析必备工具:Python、Numpy 和 Linux。
    数据分析是现代商业的重要组成部分。对于企业而言,数据分析可以帮助企业更好地了解客户、预测市场趋势、提高效率等。而在实时数据分析方面,Python、Numpy 和 Linux 是必不可少的工具。 Python 是一种高级编程语言,它被广泛用...
    99+
    2023-10-29
    linux numpy 实时
  • Python基础必备之语法结构详解
    目录Python 语句续行隐式续行的方式显式续行的方式每行多语句注释空白字符空格作为缩进Python 语句 语句是 Python 解释器解析和处理的基本指令单元。通常解释器按顺序一个...
    99+
    2024-04-02
  • Python NumPy教程之数据类型对象详解
    每个 ndarray 都有一个关联的数据类型 (dtype) 对象。这个数据类型对象(dtype)告诉我们数组的布局。这意味着它为我们提供了以下信息: 数据类型(整数、浮点数、Pyt...
    99+
    2024-04-02
  • Python必备技巧之Pandas数据合并函数
    目录1. concat2. append3. merge4. join5. combine总结1. concat concat是pandas中专门用于数据连接合并的函数,功能非常强大...
    99+
    2024-04-02
  • Python数据库编程之pymysql详解
    目录python数据库编程之pymysql一、pymsql的安装二、连接数据库三、创建和管理数据库四、创建和管理表总结Python数据库编程之pymysql 学习之前务必安装MySQL并已启动相关服务。 一、pymsql...
    99+
    2023-05-05
    Python数据库之Pymysql Python Pymysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作