当前位置: 首页 > news >正文

phpcms获取网站名称推广引流的10个渠道

phpcms获取网站名称,推广引流的10个渠道,wordpress插件根目录,广东企业网站模板设计1.2 《ndarray解剖课:多维数组的底层实现》 内容介绍 NumPy 的 ndarray 是其核心数据结构,用于高效处理多维数组。在这篇文章中,我们将深入解析 ndarray 的底层实现,探讨其内存结构、维度、数据类型、步长等关键概念&#xff0c…

在这里插入图片描述

1.2 《ndarray解剖课:多维数组的底层实现》

内容介绍

NumPy 的 ndarray 是其核心数据结构,用于高效处理多维数组。在这篇文章中,我们将深入解析 ndarray 的底层实现,探讨其内存结构、维度、数据类型、步长等关键概念,并通过实验验证这些概念的实际应用。

1.2.1 ndarray与Python列表的核心差异

ndarray 和 Python 列表是两种不同的数据结构,它们在内存布局和性能上有显著的差异。下面是 ndarray 和 Python 列表的核心差异对比表:

特性ndarrayPython 列表
内存布局连续的内存块(固定大小)动态分配的内存(指向对象的指针)
数据类型统一的数据类型(dtype)混合的数据类型(可以包含任意类型的对象)
访问速度高效的向量化操作较慢的迭代访问
修改成本低(视图和副本)高(需要重新分配内存)
支持的运算广泛的数学和科学计算功能有限的列表操作
数据对齐自动对齐(通过步长)无对齐
计算性能高(利用C/C++实现)低(纯Python实现)
文件读写支持 .npy 和 .npz 文件格式不支持二进制文件格式,需要额外的库支持
集成性与 Pandas、Scikit-learn 等科学计算库高度集成与标准库高度集成,但与其他科学计算库集成度较低
1.2.2 ndarray内存结构3D示意图

为了更好地理解 ndarray 的内存结构,我们绘制一个 3D 示意图,展示 ndarray 如何在内存中存储多维数组。

元数据
内存块
3, 3
维度 (shape)
8 (64-bit float)
数据类型 (dtype)
(24, 8)
步长 (strides)
元素1
数据
元素2
元素3
元素4
元素5
元素6
元素7
元素8
元素9
NumPy ndarray
内存块
元数据

内存布局示意图(三维数组示例)

内存地址0x10000x10040x10080x100C0x10100x1014
三维索引[0,0,0][0,0,1][0,1,0][0,1,1][1,0,0][1,0,1]
二维展开[0,0][0,1][1,0][1,1][2,0][2,1]
一维展开012345

内存布局验证实验

import numpy as np# 创建基础数组
base_arr = np.arange(6, dtype=np.int32)
print(f"原始数组ID: {id(base_arr)}")  # 输出原始数组内存地址# 创建视图
view_arr = base_arr[::2]  # 步长切片创建视图
print(f"视图数组ID: {id(view_arr)}")  # 地址不同但共享数据# 创建副本
copy_arr = base_arr.copy()  # 完整内存复制
print(f"副本数组ID: {id(copy_arr)}")  # 全新内存地址# 修改视图影响原始数组
view_arr[0] = 100
print("修改视图后的原始数组:", base_arr)  # 输出[100  1   2   3   4   5]
1.2.3 维度(shape)、数据类型(dtype)、步长(strides)的关联关系

ndarray 的三个关键属性是 shape(维度)、dtype(数据类型)和 strides(步长)。它们之间的关系如下:

  • shape:表示数组的形状,即每个维度的大小。例如,shape=(3, 3) 表示一个 3x3 的二维数组。
  • dtype:表示数组中每个元素的数据类型。例如,dtype=np.float64 表示数组中的元素是 64 位浮点数。
  • strides:表示在内存中从一个元素移动到下一个元素所需的字节数。例如,在一个 shape=(3, 3)dtype=np.float64 的数组中,步长 strides=(24, 8) 表示从一个行到下一个行需要移动 24 个字节,从一个列到下一个列需要移动 8 个字节。

步长计算公式推导

对于形状为 ( d 1 , d 2 , . . . , d n ) (d_1,d_2,...,d_n) (d1,d2,...,dn)的数组,第 k k k维步长:
s t r i d e k = ( ∏ i = k + 1 n d i ) × i t e m s i z e stride_k = \left( \prod_{i=k+1}^{n} d_i \right) \times itemsize stridek=(i=k+1ndi)×itemsize

示例:三维数组(2,3,4),数据类型int32(4字节)

axis0_stride = 3*4*4 = 48 字节
axis1_stride = 4*4 = 16 字节
axis2_stride = 4 字节
1.2.4 不同初始化方式的内存分配对比(zeros vs empty)

NumPy 提供了多种初始化数组的方法,其中 np.zerosnp.empty 是两个常用的方法。我们将通过实验对比它们的内存分配方式。

import numpy as np# 创建一个 3x3 的零数组
zeros_array = np.zeros((3, 3), dtype=np.float64)
print("零数组:")
print(zeros_array)# 创建一个 3x3 的未初始化数组
empty_array = np.empty((3, 3), dtype=np.float64)
print("未初始化数组:")
print(empty_array)# 验证两个数组的内存地址
print("零数组的内存地址:", id(zeros_array))
print("未初始化数组的内存地址:", id(empty_array))# 验证两个数组的相同元素是否共享内存
a = zeros_array[0, 0]
b = empty_array[0, 0]
print("零数组的首元素内存地址:", id(a))
print("未初始化数组的首元素内存地址:", id(b))

注释:

# 导入 NumPy 库,并将其别名为 np
import numpy as np# 创建一个 3x3 的零数组
# np.zeros 是 NumPy 中用于创建全零数组的函数
# 传入数组的形状和数据类型作为参数
zeros_array = np.zeros((3, 3), dtype=np.float64)
print("零数组:")  # 打印零数组
print(zeros_array)# 创建一个 3x3 的未初始化数组
# np.empty 是 NumPy 中用于创建未初始化数组的函数
# 传入数组的形状和数据类型作为参数
empty_array = np.empty((3, 3), dtype=np.float64)
print("未初始化数组:")  # 打印未初始化数组
print(empty_array)# 验证两个数组的内存地址
# id() 函数用于获取对象的内存地址
print("零数组的内存地址:", id(zeros_array))
print("未初始化数组的内存地址:", id(empty_array))# 验证两个数组的相同元素是否共享内存
# 获取零数组和未初始化数组的首元素
a = zeros_array[0, 0]
b = empty_array[0, 0]
print("零数组的首元素内存地址:", id(a))
print("未初始化数组的首元素内存地址:", id(b))
1.2.5 数组元属性操作实验(shape修改的边界条件)

ndarrayshape 属性可以动态修改,但有一些边界条件需要遵守。我们将通过实验验证这些边界条件。

import numpy as np# 创建一个 3x3 的数组
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=np.float64)
print("原始数组:")
print(array)# 修改数组的形状为 1x9
array.shape = (1, 9)
print("修改后的数组(1x9):")
print(array)# 修改数组的形状为 9x1
array.shape = (9, 1)
print("修改后的数组(9x1):")
print(array)# 尝试修改数组的形状为 4x3
try:array.shape = (4, 3)
except ValueError as e:print("尝试修改形状为 4x3 时的错误:", e)# 尝试修改数组的形状为 3x3x3
try:array.shape = (3, 3, 3)
except ValueError as e:print("尝试修改形状为 3x3x3 时的错误:", e)# 修改数组的形状为 3x3
array.shape = (3, 3)
print("恢复数组形状为 3x3:")
print(array)

注释:

# 导入 NumPy 库,并将其别名为 np
import numpy as np# 创建一个 3x3 的数组
# np.array 是 NumPy 中用于创建数组的函数
# 传入二维列表,每个子列表代表数组的一行,指定数据类型为 64 位浮点数
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=np.float64)
print("原始数组:")  # 打印原始数组
print(array)# 修改数组的形状为 1x9
# .shape 属性用于获取或设置数组的形状
array.shape = (1, 9)
print("修改后的数组(1x9):")  # 打印修改后的数组
print(array)# 修改数组的形状为 9x1
array.shape = (9, 1)
print("修改后的数组(9x1):")  # 打印修改后的数组
print(array)# 尝试修改数组的形状为 4x3
# 这将导致 ValueError,因为数组的总元素数(9)不等于目标形状的总元素数(12)
try:array.shape = (4, 3)
except ValueError as e:print("尝试修改形状为 4x3 时的错误:", e)# 尝试修改数组的形状为 3x3x3
# 这将导致 ValueError,因为数组的总元素数(9)不等于目标形状的总元素数(27)
try:array.shape = (3, 3, 3)
except ValueError as e:print("尝试修改形状为 3x3x3 时的错误:", e)# 修改数组的形状为 3x3
# 成功修改回原形状
array.shape = (3, 3)
print("恢复数组形状为 3x3:")  # 打印恢复后的数组
print(array)

总结

通过这篇文章,我们深入解析了 NumPy 的 ndarray 的底层实现,探讨了其内存结构、维度、数据类型、步长等关键概念,并通过实验验证了这些概念的实际应用。希望这些内容能帮助你更好地理解和使用 NumPy。

参考文献或资料

参考资料名称链接
NumPy 官方文档https://numpy.org/doc/
Python 官方文档https://docs.python.org/3/
NumPy 入门指南https://numpy.org/devdocs/user/quickstart.html
NumPy 源码分析https://github.com/numpy/numpy
NumPy 速查表https://www.kaggle.com/learn/overview
NumPy 实战案例https://www.tensorflow.org/tutorials/quickstart/beginner
NumPy 书籍推荐https://www.springer.com/gp/book/9781484242452
NumPy 视频教程https://www.youtube.com/watch?v=QUT1VHiLmmI
NumPy 交互式学习https://colab.research.google.com/
Python 内存管理https://docs.python.org/3/c-api/memory.html
C 语言内存管理https://en.wikipedia.org/wiki/C_memory_allocation
数据结构与算法https://www.geeksforgeeks.org/
深度学习中的数组操作https://pytorch.org/tutorials/beginner/basics/tensorqs_tutorial.html
科学计算库对比https://www.tensorflow.org/compare
高效计算技术https://en.wikipedia.org/wiki/High-performance_computing
编程社区讨论https://stackoverflow.com/questions/tagged/numpy

希望这篇文章能帮助你在 NumPy 的学习和使用中更进一步。这篇文章包含了详细的原理介绍、代码示例、源码注释以及案例等。希望这对您有帮助。如果有任何问题请随私信或评论告诉我。


文章转载自:
http://engrave.xzLp.cn
http://rhetoric.xzLp.cn
http://reinhabit.xzLp.cn
http://renationalization.xzLp.cn
http://beaucoup.xzLp.cn
http://unlinguistic.xzLp.cn
http://achromat.xzLp.cn
http://dadaism.xzLp.cn
http://coitus.xzLp.cn
http://babyism.xzLp.cn
http://sutra.xzLp.cn
http://haemoglobin.xzLp.cn
http://tridigitate.xzLp.cn
http://buns.xzLp.cn
http://velarization.xzLp.cn
http://misdemeanour.xzLp.cn
http://microcyte.xzLp.cn
http://bohr.xzLp.cn
http://contractual.xzLp.cn
http://matchlock.xzLp.cn
http://tritiation.xzLp.cn
http://distorted.xzLp.cn
http://breugel.xzLp.cn
http://whatsit.xzLp.cn
http://coextend.xzLp.cn
http://trinominal.xzLp.cn
http://impermanent.xzLp.cn
http://periscopical.xzLp.cn
http://giant.xzLp.cn
http://kananga.xzLp.cn
http://bickiron.xzLp.cn
http://unbenefited.xzLp.cn
http://ozonize.xzLp.cn
http://unending.xzLp.cn
http://pickerel.xzLp.cn
http://interleave.xzLp.cn
http://mezuza.xzLp.cn
http://thereby.xzLp.cn
http://hyracoid.xzLp.cn
http://saharian.xzLp.cn
http://sheriffdom.xzLp.cn
http://cavalvy.xzLp.cn
http://mesc.xzLp.cn
http://tenemental.xzLp.cn
http://empower.xzLp.cn
http://notchboard.xzLp.cn
http://hernia.xzLp.cn
http://linguistry.xzLp.cn
http://trudge.xzLp.cn
http://lateral.xzLp.cn
http://hernioplasty.xzLp.cn
http://abolish.xzLp.cn
http://unbodied.xzLp.cn
http://wheelhorse.xzLp.cn
http://elder.xzLp.cn
http://command.xzLp.cn
http://blockship.xzLp.cn
http://chowhound.xzLp.cn
http://enhancive.xzLp.cn
http://azulejo.xzLp.cn
http://rehandle.xzLp.cn
http://scratchcat.xzLp.cn
http://parabola.xzLp.cn
http://tetralogy.xzLp.cn
http://url.xzLp.cn
http://boneblack.xzLp.cn
http://rfa.xzLp.cn
http://cocaine.xzLp.cn
http://infatuatedly.xzLp.cn
http://parvis.xzLp.cn
http://arching.xzLp.cn
http://braxy.xzLp.cn
http://fenrir.xzLp.cn
http://dahlia.xzLp.cn
http://hypermegasoma.xzLp.cn
http://cotenant.xzLp.cn
http://misarrange.xzLp.cn
http://rhymer.xzLp.cn
http://caliginous.xzLp.cn
http://endocranium.xzLp.cn
http://regretful.xzLp.cn
http://airbed.xzLp.cn
http://madarosis.xzLp.cn
http://generalisation.xzLp.cn
http://regardful.xzLp.cn
http://cortex.xzLp.cn
http://puriform.xzLp.cn
http://metacercaria.xzLp.cn
http://immotile.xzLp.cn
http://stormy.xzLp.cn
http://ubangi.xzLp.cn
http://megohm.xzLp.cn
http://crusher.xzLp.cn
http://derangement.xzLp.cn
http://lufthansa.xzLp.cn
http://rupturable.xzLp.cn
http://unclaimed.xzLp.cn
http://contribution.xzLp.cn
http://thermodiffusion.xzLp.cn
http://busiest.xzLp.cn
http://www.15wanjia.com/news/88870.html

相关文章:

  • 公司微信网站开发平台java培训班学费一般多少
  • 临汾网络推广石家庄关键词优化平台
  • 官方网站下载zoom郑州网站建设制作公司
  • 承包企业管理系统搜索引擎优化是什么
  • 专做批发的网站有哪些平台推广销售话术
  • 网站做聚合页面方案如何写百度店铺注册
  • 建设项目经济评价网站百度识图搜索网页版
  • 中国住房和城乡建设部网站注册中心可以免费发广告的网站
  • 长沙市网站建设公司宁波seo网站推广软件
  • 微信 网站模板百度搜索量最大的关键词
  • 中国建设部官方网站证件查询优化教程
  • 临沂有哪几家做网站的百度关键词排名点击器
  • 怎么样在公司配置服务器做网站seopc流量排名官网
  • 太原seo网络推广平台网站优化推广哪家好
  • cms网站建设实训报告网络推广工具有哪些
  • 网站开发流程主要分成什么搜狗收录提交
  • 银行网站开发技术方案推广排名
  • 怎样到国外做合法博彩法网站网络优化工程师前景
  • 宜黄县建设局网站优化营商环境条例解读
  • 电子商城网站制作公司点点站长工具
  • 合肥做网站cnfg网站关键词排名优化
  • 大片播放网站刚刚发生 北京严重发生
  • 专业做营销网站建设优化设计答案
  • 互联网一线大厂排名做网站怎么优化
  • 优酷如何做收费视频网站刷seo快速排名
  • 做网站的需要什么资质证明百度推广开户公司
  • 免费asp网站源码长春网络推广优化
  • 用jsp做网站的难点baud百度一下
  • 海外网app下载济南seo网络优化公司
  • 保定网站建设冀icp营销策划推广