news 2026/3/3 21:24:58

NumPy库实践1_数据类型和数组创建

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
NumPy库实践1_数据类型和数组创建

常量

numpy.nan

表示空值
nan = NaN = NAN

importnumpyasnpprint(np.nan==np.nan)print(np.nan!=np.nan)#执行结果FalseTrue#两个numpy.nan是不相等的

numpy.isnan(x, *args, **kwargs) 逐元素测试是否为 NaN,并将结果以布尔数组的形式返回。

importnumpyasnp x=np.array([1,1,8,np.nan,10])print(np.isnan(x))z=np.count_nonzero(np.isnan(x))print(z)#执行结果[FalseFalseFalseTrueFalse]1
numpy.inf

表示正无穷大
Inf = inf = infty = Infinity = PINF

numpy.pi

表示圆周率
pi = 3.1415926535897932384626433…

numpy.e

表示自然常数
e = 2.71828182845904523536028747135266249775724709369995…

时间日期和时间增量

在 numpy 中,我们很方便的将字符串转换成时间日期类型datetime64(datetime 已被 python 包含的日期时间库所占用)。
datatime64是带单位的日期时间类型,其单位如下:

日期单位代码含义时间单位代码含义
Yh
Mm
Ws
Ems
usweonooooooooooooooooo
ns纳秒
ps皮秒
as飞秒
fa阿托秒
  • 1秒 = 1000 毫秒(milliseconds)
  • 1毫秒 = 1000 微秒(microseconds)
importnumpyasnp a=np.datetime64('2025-12-15')#默认情况下,会根据字符串自动选择对应的单位print(a,a.dtype)a=np.datetime64('2025-12','D')#从字符串创建 datetime64 类型时,可以强制指定使用的单位print(a,a.dtype)print(np.datetime64('2025-03')==np.datetime64('2025-03-01'))# Trueprint(np.datetime64('2025-03')==np.datetime64('2025-03-02'))#False#执行结果2025-12-15datetime64[D]2025-12-01datetime64[D]TrueFalse

由上例可以看出,2025-03 和 2025-03-01 所表示的其实是同一个时间。 事实上,如果两个 datetime64 对象具有不同的单位,它们可能仍然代表相同的时刻。并且从较大的单位(如月份)转换为较小的单位(如天数)是安全的。

从字符串创建 datetime64 数组时,如果单位不统一,则一律转化成其中最小的单位。

importnumpyasnp a=np.array(['2025-12','2025-12-15','2025-12-15 20:00'],dtype='datetime64')print(a,a.dtype)#执行结果['2025-12-01T00:00''2025-12-15T00:00''2025-12-15T20:00']datetime64[m]

使用arange()创建 datetime64 数组,用于生成日期范围。

importnumpyasnp a=np.arange('2020-08-01','2020-08-10',dtype=np.datetime64)print(a)a=np.arange('2020-08-01 20:00','2020-08-10',dtype=np.datetime64)print(a)a=np.arange('2020-05','2020-12',dtype=np.datetime64)print(a)#执行结果['2020-08-01''2020-08-02''2020-08-03''2020-08-04''2020-08-05''2020-08-06''2020-08-07''2020-08-08''2020-08-09']['2020-08-01T20:00''2020-08-01T20:01''2020-08-01T20:02'...'2020-08-09T23:57''2020-08-09T23:58''2020-08-09T23:59']['2020-05''2020-06''2020-07''2020-08''2020-09''2020-10''2020-11']
datetime64 和 timedelta64 运算

timedelta64 表示两个 datetime64 之间的差。timedelta64 也是带单位的,并且和相减运算中的两个 datetime64 中的较小的单位保持一致。

importnumpyasnp a=np.datetime64('2025-03-08')-np.datetime64('2025-03-07')b=np.datetime64('2025-03-08')-np.datetime64('2025-03-07 08:00')c=np.datetime64('2025-03-08')-np.datetime64('2025-03-07 23:00','D')print(a,a.dtype)print(b,b.dtype)print(c,c.dtype)a=np.datetime64('2025-03')+np.timedelta64(20,'D')b=np.datetime64('2025-06-15 00:00')+np.timedelta64(12,'h')print(a,a.dtype)print(b,b.dtype)#执行结果1days timedelta64[D]960minutes timedelta64[m]1days timedelta64[D]2025-03-21datetime64[D]2025-06-15T12:00datetime64[m]

生成 timedelta64时,要注意年(‘Y’)和月(‘M’)这两个单位无法和其它单位进行运算(一年有几天?一个月有几个小时?这些都是不确定的)

importnumpyasnp a=np.timedelta64(1,'Y')b=np.timedelta64(a,'M')print(a)print(b)c=np.timedelta64(1,'h')d=np.timedelta64(c,'m')print(c)print(d)print(np.timedelta64(a,'D'))#执行结果1years12months1hours60minutes TypeError:Cannot cast NumPy timedelta64 scalarfrommetadata[Y]to[D]according to the rule'same_kind'

timedelta64的运算

importnumpyasnp a=np.timedelta64(1,'Y')b=np.timedelta64(6,'M')c=np.timedelta64(1,'W')d=np.timedelta64(1,'D')e=np.timedelta64(10,'D')print(a)print(b)print(a+b)print(a-b)print(2*a)print(a/b)print(c/d)print(c%e)#执行结果1years6months18months6months2years2.07.07days

numpy.datetime64 与 datetime.datetime 相互转换

importnumpyasnpimportdatetime dt=datetime.datetime(year=2025,month=12,day=16,hour=12,minute=20,second=30)dt64=np.datetime64(dt,'s')print(dt64,dt64.dtype)dt2=dt64.astype(datetime.datetime)print(dt2,type(dt2))#执行结果2025-12-16T12:20:30datetime64[s]2025-12-1612:20:30<class'datetime.datetime'>
datetime64的应用

NumPy包含一组“busday”(工作日)功能。
numpy.busday_offset(dates, offsets, roll=‘raise’, weekmask=‘1111100’, holidays=None, busdaycal=None, out=None)
首先根据滚动规则将日期调整为有效日,然后对给定日期应用以有效日计的偏移量。
参数roll:{‘raise’, ‘nat’, ‘forward’, ‘following’, ‘backward’, ‘preceding’, ‘modifiedfollowing’, ‘modifiedpreceding’}
raise:意味着为无效日期引发异常。
nat:表示对于无效日期返回一个 NaT(非时间)。
forward和following:意味着在时间上选择第一个有效的后续日期。
backward和preceding:意味着选取时间上更早的第一个有效日期。

将指定的偏移量应用于工作日,单位天(‘D’)。计算下一个工作日,如果当前日期为非工作日,默认报错。可以指定forwardbackward规则来避免报错。(一个是向前取第一个有效的工作日,一个是向后取第一个有效的工作日)

importnumpyasnp#2025-12-12是周五a=np.busday_offset('2025-12-12',offsets=1)print(a)a=np.busday_offset('2025-12-13',offsets=1)print(a)a=np.busday_offset('2025-12-13',offsets=0,roll='forward')b=np.busday_offset('2025-12-13',offsets=0,roll='backward')print(a)print(b)a=np.busday_offset('2025-12-13',offsets=1,roll='forward')b=np.busday_offset('2025-12-13',offsets=1,roll='backward')print(a)print(b)#执行结果2025-12-15ValueError:Non-business day dateinbusday_offset2025-12-152025-12-122025-12-162025-12-15#可以指定偏移量为 0 来获取当前日期向前或向后最近的工作日,当然,如果当前日期本身就是工作日,则直接返回当前日期。

返回指定日期是否是工作日。

importnumpyasnp a=np.is_busday('2025-12-13')b=np.is_busday('2025-12-16')print(a)print(b)#执行结果FalseTrue

统计一个 datetime64[D]数组中的工作日天数。

importnumpyasnp begindates=np.datetime64('2025-12-12')enddates=np.datetime64('2025-12-16')a=np.arange(begindates,enddates,dtype='datetime64')b=np.count_nonzero(np.is_busday(a))print(a)print(b)#执行结果['2025-12-12''2025-12-13''2025-12-14''2025-12-15']2

自定义周掩码值,即指定一周中哪些星期是工作日。

importnumpyasnp a=np.is_busday('2025-12-12',weekmask=[1,1,1,1,1,0,0])b=np.is_busday('2025-12-12',weekmask=[1,1,1,1,0,0,1])print(a)print(b)#执行结果TrueFalse

返回两个日期之间的工作日数量。

importnumpyasnp begindates=np.datetime64('2025-12-12')enddates=np.datetime64('2025-12-16')a=np.busday_count(begindates,enddates)b=np.busday_count(enddates,begindates)print(a)print(b)#执行结果2-2

数组的创建

array()asarray()都可以将结构数据转化为 ndarray,但是array()asarray()主要区别就是当数据源是ndarray时,array()仍然会 copy 出一个副本,占用新的内存,但不改变 dtype 时asarray()不会。

通过fromfunction()函数进行创建

给函数绘图的时候可能会用到fromfunction(),该函数可从函数中创建数组。

importnumpyasnpdeff(x,y):return10*x+y x=np.fromfunction(f,(5,4),dtype=int)print(x)x=np.fromfunction(lambdai,j:i==j,(3,3),dtype=int)print(x)x=np.fromfunction(lambdai,j:i+j,(3,3),dtype=int)print(x)#执行结果[[0123][10111213][20212223][30313233][40414243]][[TrueFalseFalse][FalseTrueFalse][FalseFalseTrue]][[012][123][234]]
依据 ones 和 zeros 填充方式
  • zeros()函数:返回给定形状和类型的零数组。
  • zeros_like()函数:返回与给定数组形状和类型相同的零数组。
  • ones()函数:返回给定形状和类型的1数组。
  • ones_like()函数:返回与给定数组形状和类型相同的1数组。
  • empty()函数:返回一个空数组,数组元素为随机数。
  • empty_like函数:返回与给定数组具有相同形状和类型的新数组。
  • eye()函数:返回一个对角线上为1,其它地方为零的单位数组。
  • identity()函数:返回一个方的单位数组。
  • diag()函数:提取对角线或构造对角数组。
  • full()函数:返回一个常数数组。
  • full_like()函数:返回与给定数组具有相同形状和类型的常数数组。
  • arange()函数:返回给定间隔内的均匀间隔的值。
  • linspace()函数:返回指定间隔内的等间隔数字。
  • logspace()函数:返回数以对数刻度均匀分布。
  • numpy.random.rand() 返回一个由[0,1)内的随机数组成的数组。
数组的属性

在使用 numpy 时,你会想知道数组的某些信息。很幸运,在这个包里边包含了很多便捷的方法,可以给你想要的信息。

  • numpy.ndarray.ndim用于返回数组的维数(轴的个数)也称为秩,一维数组的秩为 1,二维数组的秩为 2,以此类推。
  • numpy.ndarray.shape表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即ndim属性(秩)。
  • numpy.ndarray.size数组中所有元素的总量,相当于数组的shape中所有元素的乘积,例如矩阵的元素总量为行与列的乘积。
  • numpy.ndarray.dtypendarray对象的元素类型。
  • numpy.ndarray.itemsize以字节的形式返回数组中每一个元素的大小。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/3 15:48:12

FaceFusion人脸选择器:模式与参考面管理

FaceFusion人脸选择器&#xff1a;模式与参考面管理 在短视频、虚拟偶像和AI换脸技术迅猛发展的今天&#xff0c;如何精准地从复杂画面中识别并操控特定人脸&#xff0c;已成为内容创作者面临的核心挑战之一。一个看似简单的“选人”动作&#xff0c;背后往往涉及多张人脸的排序…

作者头像 李华
网站建设 2026/3/3 15:48:16

Qwen-Image-Edit-2509推理延迟优化实战

Qwen-Image-Edit-2509推理延迟优化实战 凌晨两点&#xff0c;电商运营团队还在为“618”大促紧急修改上千张商品主图——背景要换、文案要调、模特姿势还得微调。设计师一边手动PS&#xff0c;一边嘀咕&#xff1a;“要是能说句话就改完就好了……” 现在&#xff0c;这句话可以…

作者头像 李华
网站建设 2026/3/3 15:48:17

怎么将windows文件显示的Comments列一直显示出来

要让资源管理器里的 “Comments&#xff08;注释&#xff09;” 列“长期/默认一直显示”&#xff0c;关键是&#xff1a;先把列加出来&#xff0c;再把当前视图应用到同类文件夹&#xff08;同一种“文件夹模板”&#xff09;。1&#xff09;先把“Comments”列加到当前文件夹…

作者头像 李华
网站建设 2026/3/3 15:48:17

咸鱼大量流出168元飞牛云NAS小主机,六代i3支持4K解析,板载4G内存,M2+2.5寸SATA双盘位,还带mpcie扩展!

咸鱼二手市场上总是能够流出各种各样的小主机&#xff0c;除开数量庞大的洋垃圾之类的小主机&#xff0c;还得是企事业单位淘汰的小主机&#xff0c;比如痩客户机&#xff0c;以及云终端智能设备&#xff0c;某些小主机还是具备一定的扩展性&#xff0c;以此带来较多的可玩性及…

作者头像 李华
网站建设 2026/3/3 15:48:19

使用Dify构建个性化推荐系统的可行性分析

使用Dify构建个性化推荐系统的可行性分析 在电商平台首页&#xff0c;一个新用户刚注册完账号&#xff0c;系统便精准地向他推荐了一款小众但高匹配度的机械键盘——这并非来自复杂的协同过滤模型训练&#xff0c;而是由一套基于大语言模型&#xff08;LLM&#xff09;的智能推…

作者头像 李华
网站建设 2026/3/3 15:48:19

LangFlow支持正则表达式节点,实现智能文本清洗

LangFlow支持正则表达式节点&#xff0c;实现智能文本清洗 在构建大语言模型&#xff08;LLM&#xff09;应用的过程中&#xff0c;一个常常被低估但至关重要的环节是——输入质量的把控。再强大的模型&#xff0c;面对满是噪声、格式混乱甚至包含敏感信息的原始文本时&#xf…

作者头像 李华