【数据分析】一、初探 Numpy

目录

  • 前言
  • 1. 一维 array 的生成
  • 2. 一维 array 的基本操作
    • 2.1. 查看属性
    • 2.2. 花式索引
    • 2.3. 条件筛查
    • 2.4. 数据统计
  • 3. n 维 array 的生成
  • 4. n 维 array 的基本操作
    • 4.1. 查看属性
    • 4.2. 查询和切片
    • 4.3. 花式索引
    • 4.4. 矩阵

前言

  NumpyPython的常用开源数值计算扩展库,用于高效存储和处理大型矩阵。本文主要介绍Numpy数组array的操作及其相关函数的使用。

  以下对Numpy库函数的介绍中,已传入的参数为默认值,并且无返回值的函数不会以赋值形式演示。
  

1. 一维 array 的生成

  • array(p_object, dtype)引用一个列表元组,生成类型dtype的一维数组
  • arange(start, stop, step):生成相当于array(range(start, stop, step))整数序列
  • linspace(start, stop, num=50, endpoint=True, retstep=False, dtype='float64'):生成长度num类型dtype,在[start, stop]上的等差序列endpoint表示区间右端是否封闭retstep=True时则返回一个元组(array, step),即等差数列和步长
  • empty(shape, dtype='float64'):生成长度shape类型dtype,元素的全为空值的一维数组
  • zeros(shape, dtype='float64'):生成长度shape类型dtype,元素的全为0的一维数组
  • ones(shape, dtype='float64'):生成*长度shape类型dtype,元素的值**全为1的一维数组
  • fill(value):将value转换为原数组的数据类型后,把原数组的元素的全部填充value
  • random.rand(d):在区间[0, 1)生成随机浮点数,返回长度d的一维数组
  • random.randn(d):生成服从正态分布随机浮点数,返回长度d的一维数组
  • random.randint(low, high, size, dtype='int'):在区间[low, high)生成类型dtype随机数,返回长度size的一维数组
import numpy as np# 引用创建
l = [1, 2, 3, 4]
a = np.array(l, dtype='float')  # [1. 2. 3. 4.]# 整数序列
a = np.arange(1, 10, 2)         # [1 3 5 7 9]# 等差数列
a = np.linspace(1, 10, 4)       # [ 1.  4.  7. 10.]# 全0填充 
a = np.zeros(3, dtype='bool')   # [False False False]# 全1填充
a = np.ones(4, dtype='int')     # [1 1 1 1]# 任意值填充
a.fill(2.5)                     # [2 2 2 2]# 随机浮点数
a = np.random.rand(3)           # [0.39581995 0.13435102 0.31592101]# 随机正态分布值
a = np.random.randn(3)          # [ 1.62916156  0.44159883 -1.85375949]# 随机数
a = np.random.randint(1, 3, 5)  # [1 1 2 1 1]

  

2. 一维 array 的基本操作

2.1. 查看属性

import numpy as np
a = np.array([1, 2, 3, 4])# 查看类型:即元素的数据类型
print(a.dtype)              # int32# 查看维度
print(a.ndim)               # 1# 查看长度:即元素数目
print(a.size)               # 4# 查看尺寸:返回一个元组,值为对应维度的元素数目
print(a.shape)              # (4,)# 类型转换
# a = np.array(a, dtype='float64')
a = a.astype('float64')     # [1. 2. 3. 4.]

  

2.2. 花式索引

import numpy as np
a = np.arange(1, 20, 2)
'''[ 1  3  5  7  9 11 13 15 17 19]'''# 索引列表:获取对应索引的元素
print(a[[2, 2, -3, 6, -1]])
'''[ 5  5 15 13 19]'''# 布尔数组:和numpy数组长度相等,获取布尔值为True的对应位置上的元素
print(a[np.array([1, 1, 0, 1, 0, 1, 1, 0, 1, 0], dtype='bool')])
'''[ 1  3  7 11 13 17]'''

  

2.3. 条件筛查

import numpy as np
a = np.arange(1, 20, 2)
'''[ 1  3  5  7  9 11 13 15 17 19]'''# 对数组中的所有元素做条件判断,并在对应位置返回布尔值
print(a > 10)
'''[False False False False False  True  True  True  True  True]'''# 以元组形式,返回所有符合条件的元素的索引
print(np.where(a > 10))
'''(array([5, 6, 7, 8, 9], dtype=int64),)'''# 返回所有符合条件的元素的数组
print(a[a > 10])
print(a[np.where(a > 10)])
'''[11 13 15 17 19]'''

  

2.4. 数据统计

import numpy as np
a = np.array([-5, -2, 3, 1, 4])'''排列'''
# 正序排列
b = np.sort(a)      # [-5 -2  1  3  4]# 排列后的元素在原数组中的索引
b = np.argsort(a)   # [0 1 3 2 4]'''运算'''
# 应用于所有元素
b = a+1             # [-4 -1  4  2  5]# 应用于对应元素
b = b*a             # [20  2 12  2 20]# 绝对值
abs = np.abs(a)     # [5 2 3 1 4]# 指数
exp = np.exp(a)     # [6.73794700e-03 1.35335283e-01 2.00855369e+01 2.71828183e+00 5.45981500e+01]'''统计'''
# 求和
# s = a.sum()
s = np.sum(a)       # 1# 最小值
# m = a.min()
m = np.min(a)       # -5# 最大值
# M = a.max()
M = np.max(a)       # 4# 均值
# avg = a.mean()
avg = np.mean(a)    # 0.2# 中值
#
mid = np.median(a)  # 1.0# 累计和(前缀和)
cs = np.cumsum(a)   # [-5 -7 -4 -3  1]# 标准差
# std = a.std()
std = np.std(a)     # 3.3105890714493698

  

3. n 维 array 的生成

  • array(p_object, dtype)引用一个由 n个相同长度的列表元组 构成的元组,生成类型dtypen维数组
  • empty((*dn), dtype='float64'):生成尺寸(d0, d1, ..., dn)类型dtype,元素的全为空值n维数组
  • zeros((*dn), dtype='float64'):生成尺寸(d0, d1, ..., dn)类型dtype,元素的全为0n维数组
  • ones((*dn), dtype='float64'):生成尺寸(d0, d1, ..., dn)类型dtype,元素的全为1n维数组
  • fill(value):将value转换为原数组的数据类型后,把原数组的元素的全部填充value
  • random.rand(*dn):在区间[0, 1)生成随机浮点数,返回尺寸(d0, d1, ..., dn)n维数组
  • random.randn(*dn):生成服从正态分布随机浮点数,返回尺寸(d0, d1, ..., dn)n维数组
  • random.randint(low, high, (*dn), dtype='int'):在区间[low, high)生成类型dtype随机数,返回尺寸(d0, d1, ..., dn)n维数组
import numpy as np# 引用创建
a = np.array(([1, 2, 3, 4], (5, 6, 7, 8)))
'''
[[1 2 3 4][5 6 7 8]]
'''# 全0填充
a = np.zeros((2, 4))
'''
[[0. 0. 0. 0.][0. 0. 0. 0.]]
'''# 全1填充
a = np.ones((2, 4))
'''
[[1. 1. 1. 1.][1. 1. 1. 1.]]
'''# 任意值填充
a.fill(False)
'''
[[0. 0. 0. 0.][0. 0. 0. 0.]]
'''# 随机浮点数
a = np.random.rand(2, 2)
'''
[[0.11188812 0.83587679][0.98262527 0.79479766]]
'''# 随机正态分布值
a = np.random.randn(2, 2)
'''
[[-0.79453966 -1.5958028 ][ 0.89898492 -0.9779685 ]]
'''# 随机数
a = np.random.randint(1, 10, (2, 4))
'''
[[9 7 3 9][3 7 4 8]]
'''

  

4. n 维 array 的基本操作

  以二维数组为例。

4.1. 查看属性

import numpy as np
a = np.array(([1, 2, 3, 4], (5, 6, 7, 8)))
'''
[[1 2 3 4][5 6 7 8]]
'''# 查看类型
print(a.dtype)              # int32# 查看维度
print(a.ndim)               # 2# 查看数目
print(a.size)               # 8# 查看尺寸
print(a.shape)              # (2, 4)# 对数组所有元素进行运算
a = a+1
'''
[[2 3 4 5][6 7 8 9]]
'''# 两个数组的对应元素进行运算
a = a*(a-1)
'''
[[ 2  6 12 20][30 42 56 72]]
'''

  

4.2. 查询和切片

import numpy as np
a = np.array(([1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]))
'''
[[ 1  2  3  4][ 5  6  7  8][ 9 10 11 12][13 14 15 16]]
'''
print(a)
# 单元查询:对于a[x, y],x是行索引,y是列索引
print(a[1, 0])              # 5# 单行查询
print(a[1])                 # [5 6 7 8]# 单列查询
print(a[:, 1])              # [ 2  6 10 14]# 连续区域切片
print(a[1:3, 1:3])
'''
[[ 6  7][10 11]]
'''# 离散区域切片
print(a[1::2, 1::2])
'''
[[ 6  8][14 16]]
'''# 不完全索引:只给出行索引范围时,默认对整行切片
print(a[:3])
'''
[[ 1  2  3  4][ 5  6  7  8][ 9 10 11 12]]
'''

  
  与列表不同的是,Numpy数组的切片是对原数组的引用,即它们共同指向一处内存空间,这意味元素的修改会同时作用到数组和它的切片上。可以用copy()方法进行拷贝,申请新的内存。

import numpy as npa = np.array([1, 2, 3, 4])
b = a[1: 3]
b[0] = '0'
print(a)    # [1 0 3 4]a = [1, 2, 3, 4]
b = a[1: 3]
b[0] = '0'
print(a)    # [1, 2, 3, 4]

  

4.3. 花式索引

  花式索引是对原数组的拷贝而非引用。

import numpy as np
a = np.array(([1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]))
'''
[[ 1  2  3  4][ 5  6  7  8][ 9 10 11 12][13 14 15 16]]
'''# 索引列表
print(a[[0, 1, 2, 3], [0, 1, 2, 3]])
'''[ 1  6 11 16]'''# 布尔数组:需要指定列
mask = np.array([0, 1, 0, 1], dtype='bool')
print(a[mask])
'''
[[ 5  6  7  8][13 14 15 16]]
'''
print(a[mask, 1])   # [ 6 14]
print(a[1, mask])   # [6 8]# 配合切片使用花式索引
print(a[1: 3, [0, 3]])
'''
[[ 5  8][ 9 12]]
'''
'''

  

4.4. 矩阵

import numpy as np
x = np.array([1, 3, 2, 4, 6, 9])
y = np.array([13, 25, 37, 42, 54, 69])# 相关系数矩阵
cov = np.cov(x, y)
'''
[[  8.56666667  55.        ][ 55.         400.8       ]]
'''# 变形
x = x.reshape(2, 3)
'''
[[1 3 2][4 6 9]]
'''
y.shape = (2, 3)
print(y)                # 原矩阵发生改变
'''
[[13 25 37][42 54 69]]
'''# 转置
# x_T = x.T
x_T = x.transpose()     # 原矩阵不发生改变
'''
[[1 4][3 6][2 9]]
'''# 连接
'''沿行方向,即第一维(默认)'''
# z = np.vstack((x, y))
z = np.concatenate((x, y), axis=0)
'''
[[ 1  3  2][ 4  6  9][13 25 37][42 54 69]]
''''''沿列方向,即第二维'''
# z = np.hstack((x, y))
z = np.concatenate((x, y), axis=1)
'''
[[ 1  3  2 13 25 37][ 4  6  9 42 54 69]]
''''''沿垂直方向,即第三维'''
z = np.array((x, y))
print(z)
'''
[[[ 1  3  2][ 4  6  9]][[13 25 37][42 54 69]]]
'''
z = np.dstack((x, y))
'''
[[[ 1 13][ 3 25][ 2 37]][[ 4 42][ 6 54][ 9 69]]]
'''

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/892652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW数据库管理系统

LabVIEW数据库管理系统(DBMS)是一种集成了数据库技术与数据采集、控制系统的解决方案。通过LabVIEW的强大图形化编程环境,结合数据库的高效数据存储与管理能力,开发人员可以实现高效的数据交互、存储、查询、更新和报告生成。LabV…

如何在 Linux、MacOS 以及 Windows 中打开控制面板

控制面板不仅仅是一系列图标和菜单的集合;它是通往优化个人计算体验的大门。通过它,用户可以轻松调整从外观到性能的各种参数,确保他们的电脑能够完美地适应自己的需求。无论是想要提升系统安全性、管理硬件设备,还是简单地改变桌…

python 轮廓 获取环形区域

目录 效果图: 代码: 效果图: 代码: import cv2 import numpy as np# 读取图像 image cv2.imread(rE:\project\jijia\tools_jijia\img_tools\ground_mask.jpg, cv2.IMREAD_GRAYSCALE) # 二值化图像 # 二值化图像 _, binary cv…

Clickhouse基础(一)

数据存储的目录,在存储数据时是先经过压缩后再存储的,压缩效率很高 操作命令: sudo clickhouse start sudo clickhouse restart sudo clickhouse status进入clickhouse clickhouse-client -mCREATE TABLE db_13.t_assist (modelId UInt64,…

基于spingbott+html+Thymeleaf的24小时智能服务器监控平台设计与实现

博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c等开发语言,以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架…

从 SQL 语句到数据库操作

1. SQL 语句分类 数据定义语言 DDL : 用于定义或修改数据库中的结构,如:创建、修改、删除数据库对象。create、drop alter 数据操作语言 DML : 用于添加、删除、更新数据库中的数据。select、insert alter、drop 数据控制语言 D…

Excel中SUM求和为0?难道是Excel有Bug!

大家好,我是小鱼。 在日常工作中有时会遇到这样的情况,对Excel表格数据进行求和时,结果竟然是0,很多小伙伴甚至都怀疑是不是Excel有Bug!其实,在WPS的Excel表格中数据求和,结果为0无法正确求和的…

【简博士统计学习方法】第2章:3. 感知机——学习算法之对偶形式:算法解说

3. 感知机——学习算法之对偶形式:算法解说 3.4 对偶形式 在原始形式中,若 ( x i , y i ) (x_i,y_i) (xi​,yi​)为误分类点,可如下更新参数: w ← w η y i x i ; b ← b η y i w \leftarrow w\eta y_{i} x_{i} ; \quad b …

YARN 集群

一、集群角色 1.1 概述 Apache Hadoop YARN是一个标准的Master/Slave集群(主从架构)。其中ResourceManager(RM) 为Master, NodeManager(NM) 为 Slave。常见的是一主多从集群,也可以…

ASP.NET Core - .NET 6 以上版本的入口文件

ASP.NET Core - .NET 6 以上版本的入口文件 自从.NET 6 开始,微软对应用的入口文件进行了调整,移除了 Main 方法和 Startup 文件,使用顶级语句的写法,将应用初始化的相关配置和操作全部集中在 Program.cs 文件中,如下&…

云平台一键部署【Video-Background-Removal】视频换背景,无任何限制,随意换

Video-Background-Removal 是一款革命性的视频背景替换工具,旨在让用户轻松实现视频背景的快速更换。无论你是专业创作者还是普通用户,这款软件都能让你在几秒钟内改变背景,完全消除限制,随心所欲,随时随地想换就换&am…

独立开发者工具集:AppSumo网站科普

独立开发者经常会访问 AppSumo,原因在于以下几点: 推广自己的产品: AppSumo 对独立开发者来说是一个很好的分发平台,能够帮助他们快速触达大量潜在用户。通过在 AppSumo 上发布限时优惠,开发者可以获得更多的曝光、用…

Apache Hop从入门到精通 第三课 Apache Hop下载安装

1、下载 官方下载地址:https://hop.apache.org/download/,本教程是基于apache-hop-client-2.11.0.zip进行解压,需要jdk17,小伙伴们可以根据自己的需求下载相应的版本。如下图所示 2、下载jdk17(https://www.microsoft…

服务器引导异常,Grub报错: error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found.

服务器引导异常,Grub报错: error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found. 1. 故障现象2. 解决思路3. 故障分析4. 案件回溯5. 解决问题 1. 故障现象 有一台服务器业务报无法连接. 尝试用Ping命令发现无法ping通. 通过控制台查看发现有以下报错: error: ..…

解决:ubuntu22.04中IsaacGymEnv保存视频报错的问题

1. IsaacGymEnvs项目介绍 IsaacGymEnvs:基于NVIDIA Isaac Gym的高效机器人训练环境 IsaacGymEnvs 是一个基于 NVIDIA Isaac Gym 的开源 Python 环境库,专为机器人训练提供高效的仿真环境。Isaac Gym 是由 NVIDIA 开发的一个高性能物理仿真引擎&#xf…

AI浪潮下的IT变革之路:机遇、挑战与重塑未来

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 AI浪…

010:传统计算机视觉之大津算法初探

本文为合集收录,欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 上一节学习了利用 Canny 算法来完成一个图片的边缘检测,从而可以区分出图像的边缘。 本节再了解一个计算机视觉中更常见的应用,那就是把图片的前景和…

【Redis】初识分布式系统

目录 单机架构 分布式系统 应用数据分离架构 应用服务集群架构 读写分离/主从分离架构 冷热分离架构 垂直分库 微服务架构 分布式名词概念 本篇博文,将根据分布式系统的演进一步一步介绍每一种架构的形式,最后为大家总结了一些分布式中常用的…

计算机网络 笔记 数据链路层3(局域网,广域网,网桥,交换机)

局域网: LAN:在某一区域内由多台计算机互联成的计算机组,使用广播信道 特点: 覆盖范围有限:通常局限在几千米范围内,比如一栋办公楼、一个校园或一个工厂等相对较小的地理区域。 数据传输速率高:一般能达到 10Mbps…

配置 One API + ChatGPT-Next-Web,以讯飞星火认知大模型为例

配置 One API ChatGPT-Next-Web,以讯飞星火认知大模型为例 1.0 One API 配置1.1 获取大模型 API1.2 配置 OneAPI 渠道1.3 配置OneAPI 令牌 2.0 ChatGPT-Next-Web 配置 同步发布在个人笔记配置 One API ChatGPT-Next-Web,以讯飞星火认知大模型为例 上一…