【数据分析】一、初探 Numpy

news2025/1/14 15:36:08

目录

  • 前言
  • 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 np

a = 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.coloradmin.cn/o/2276544.html

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

相关文章

【面试题】技术场景 4、负责项目时遇到的棘手问题及解决方法

工作经验一年以上程序员必问问题 面试题概述 问题为在负责项目时遇到的棘手问题及解决方法,主要考察开发经验与技术水平,回答不佳会影响面试印象。提供四个回答方向,准备其中一个方向即可。 1、设计模式应用方向 以登录为例,未…

2025华数杯国际赛A题完整论文讲解(含每一问python代码+数据+可视化图)

大家好呀,从发布赛题一直到现在,总算完成了2025“华数杯”国际大学生数学建模竞赛A题Can He Swim Faster的完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文…

关闭window10或11自动更新和自带杀毒

关闭window10或11自动更新和自带杀毒 1.关闭系统更新**修改组策略关闭自动更新****修改服务管理器关闭自动更新** 2.关闭系统杀毒 为什么需要关闭更新和杀毒 案例: #装完驱动隔一段时间就掉 #一些设置隔一段时间就重置了 #防止更新系统后有时卡 1.关闭系统更新 我…

解析OVN架构及其在OpenStack中的集成

引言 随着云计算技术的发展,虚拟化网络成为云平台不可或缺的一部分。为了更好地管理和控制虚拟网络,Open Virtual Network (OVN) 应运而生。作为Open vSwitch (OVS) 的扩展,OVN 提供了对虚拟网络抽象的支持,使得大规模部署和管理…

【ArcGIS技巧】如何给CAD里的面注记导入GIS属性表中

前面分享了GIS怎么给田块加密高程点,但是没有分享每块田的高程对应的是哪块田,今天结合土地整理软件GLAND做一期田块的属性怎么放入GIS属性表当中。 1、GLAND数据 杭州阵列软件(GLand)是比较专业的土地整理软件,下载之…

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

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

Spring MVC简单数据绑定

【图书介绍】《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》_springspringmvcmybatis从零开始 代码、课件、教学视频与相关软件包下载-CSDN博客 《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版&…

蓝桥杯备考:数据结构之栈 和 stack

目录 栈的概念以及栈的实现 STL 的stack 栈和stack的算法题 栈的模板题 栈的算法题之有效的括号 验证栈序列 后缀表达式 括号匹配 栈的概念以及栈的实现 栈是一种只允许在一端进行插入和删除的线性表 空栈:没有任何元素 入栈:插入元素消息 出…

使用Dify创建个问卷调查的工作流

为啥要使用Dify创建工作流呢?一个基于流程的智能体的实现,特别是基于业务的实现,使用Dify去实现时,通常都是一个对话工作流,当设计到相对复杂一些的流程时,如果将所有逻辑都放在对话工作流中去实现&#xf…

QT Quick QML 实例之椭圆投影,旋转

文章目录 一、前言二、演示三、部分代码与分析 QML 其它文章请点击这里: QT QUICK QML 学习笔记 国际站点 GitHub: https://github.com/chenchuhan 国内站点 Gitee : https://gitee.com/chuck_chee 一、前言 此 Demo 主要用于无人机吊舱视角的模拟&#xf…

高通,联发科(MTK)等手机平台调优汇总

一、常见手机型号介绍: ISP除了用在安防行业,还有手机市场,以及目前新型的A/VR眼睛,机器3D视觉机器人,医疗内窥镜这些行业。 下面是一些最近几年发布的,,,旗舰SOC型号: 1.联发科:天玑92…

AI的崛起:它将如何改变IT行业的职业景象?

随着人工智能(AI)的快速发展,许多人开始担忧其对IT行业的影响,担心AI的出现可能会导致大量IT从业者失业。然而,事实并非如此简单,AI的崛起将为IT行业带来深刻的变革,既有挑战,也有机…

【25考研】西南交通大学软件工程复试攻略!

一、复试内容 复试对考生的既往学业情况、外语听说交流能力、专业素质和科研创新能力,以及综合素质和一贯表现等进行全面考查,主要考核内容包括思想政治素质和道德品质、外语听说能力、专业素质和能力,综合素质及能力。考核由上机考试和面试两部分组成&a…

玩转大语言模型——langchain调用ollama视觉多模态语言模型

系列文章目录 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 langchain调用ollama视觉多模态语言模型 系列文章目录前言使用Ollama下载模型查找模型下载模型 测试模型ollama测试langchain测试加载图片加载模型…

Android Dex VMP 动态加载加密指令流

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 上一篇【详解如何自定义 Android Dex VMP 保护壳】实现了 VMP 保护壳。 为了进一步加强对 dex 指令的保护,实现指令流加密和动态加载,…

浅谈云计算08 | 基本云架构

浅谈基本云架构 一、负载分布架构二、资源池架构三、动态可扩展架构四、弹性资源容量架构五、服务负载均衡架构六、云爆发架构七、弹性磁盘供给架构八、冗余存储架构 在当今数字化时代,云计算已成为企业发展的核心驱动力,而其背后的一系列关键架构则是支…

从零开始开发纯血鸿蒙应用之多签名证书管理

从零开始开发纯血鸿蒙应用 一、前言二、鸿蒙应用配置签名证书的方式1、自动获取签名证书2、手动配置签名证书 三、多签名证书配置和使用四、多证书使用 一、前言 由于手机操作系统,比电脑操作系统脆弱很多,同时,由于手机的便携性&#xff0c…

Windows Docker 安装

使用别人写好的软件/工具最大的障碍是什么——必然是配环境。配环境带来的折磨会极大地消解你对软件、编程本身的兴趣。虚拟机可以解决配环境的一部分问题,但它庞大笨重,且为了某个应用的环境配置好像也不值得模拟一个全新的操作系统。 Docker 的出现让…

LabVIEW运动控制(一):EtherCAT运动控制器的SCARA机械手应用

ZMC408CE 高性能总线型运动控制器 ZMC408CE是正运动推出的一款多轴高性能EtherCAT总线运动控制器,具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口,ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。 ZMC408CE支持PLC、Basic、HMI组态三种…

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【327-337】

327. 断点调试(Debug) 一个实际需求 在开发中,程序员在查找错误时,可用断点模式在断点调试过程中,是运行状态,是以对象的运行类型来执行的。 A extends B; B b new A(); b.xx();//按照运行类型来执行的 …