DataLearner AI 专注大模型评测、数据资源与实践教学的知识平台,持续更新可落地的 AI 能力图谱。
© 2026 DataLearner AI. DataLearner 持续整合行业数据与案例,为科研、企业与开发者提供可靠的大模型情报与实践指南。
NumPy新版本发布了~~1.20.0横空出世 | DataLearnerAI
首页 / 博客列表 / 博客详情 简介
NumPy是Python中非常优秀的一个数据科学工具包,使用Python做数据分析的童鞋几乎是必备的工具。NumPy的提供了非常丰富的计算能力,但是底层是C语言实现的,因此既有Python语法的低门槛,速度上却依然非常好。NumPy本身也和Pandas、SciPy一起成为一种生态了。
今天,NumPy发布了1.20.0最新版本,这个版本的改动很大。值得童鞋们关注~
这个版本支持Python3.7-3.9(注意,3.6已经被抛弃了哦)。由184位贡献者实现了684个PRs。主要的变化如下:
欢迎关注 DataLearner 官方微信,获得最新 AI 技术推送
NumPy函数的注释。这项工作还在进行中,预计会在用户反馈的基础上进行改进。
更广泛地使用SIMD来提高ufuncs的执行速度。在引入通用函数方面已经做了很多工作,这些通用函数将方便在不同硬件平台上使用新功能。这项工作还在进行中。
对dtype和casting实现的改造,以便为扩展dtypes提供一个更容易的途径。这项工作还在进行中,但已经做了足够的实验和反馈。
广泛的文档改进,包括大约 185 个 PR 合并。这项工作正在进行中,是改进对新用户有用性的大项目的一部分。
进一步清理与移除 Python 2.7 有关的内容。这提高了代码的可读性,并消除了一些技术债务。
一、NumPy1.20.0的新函数
1.1、数组新的“洗牌”方法首先我们看一下随机生成器里面新增的一个方法,即permuted方法。终于新增了一个这样实用的按维度随机重排数组的方法了。
在此之前已经有shuffle和permutation了,这两个方法是对数组进行进行随机重排列的方法,区别在于一个是数组本身重排列,另一个是重排列结果返回一个副本。但是这两个随机重排列的方法都只能针对数组中的某一个维度,也就是说只能随机重排某一个维度下的数组。对于多维数据,如二维数据为例,它只能让所有的行或者列都按一种方式重排。
>>> rg = np.random.default_rng()
>>> x = np.arange(0 , 15 ).reshape(3 , 5 )
>>> x
array([[ 0 , 1 , 2 , 3 , 4 ],
[ 5 , 6 , 7 , 8 , 9 ],
[10 , 11 , 12 , 13 , 14 ]])
>>> rg.permutation(x, axis=1 )
array([[ 1 , 3 , 2 , 0 , 4 ],
[ 6 , 8 , 7 , 5 , 9 ],
[11 , 13 , 12 , 10 , 14 ]])
可以看到,这种重排方式就是第0列变成了第3列,第2列变成了第0列,等等。
而新增的permuted方法则可以每一个维度独立重排。
>>> rg.permuted(x, axis=1 )
array([[ 1 , 0 , 2 , 4 , 3 ],
[ 5 , 7 , 6 , 9 , 8 ],
[10 , 14 , 12 , 13 , 11 ]])
1.2、新增滑动窗口查看方法在一些与时间有关的问题中,滑动窗口是一个非常重要的工具,比如从某一个时刻开始,一次按照多少步长滑动,到下一个时刻的数据中。
新增的numpy.lib.stride_tricks.sliding_window_view 方法可以让我们按照这种方式去查看数据。此前,NumPy并没有提供这样的方法供我们使用,其它方法也都效率不太好。
当然这个问题本身就很麻烦,毕竟如果一个很大的序列,用一个窗口去滑动效率就不高,尤其是序列很长,窗口很小的时候,目前NumPy提供的这个方法算是一个比较高效的解决方案了。
>>> x = np.arange(6 )
>>> x.shape
(6 ,)
>>> v = sliding_window_view(x, 3 )
>>> v.shape
(4 , 3 )
>>> v
array([[0 , 1 , 2 ],
[1 , 2 , 3 ],
[2 , 3 , 4 ],
[3 , 4 , 5 ]])
1.3、新增broadcasting用户接口broadcasting是数组计算中很重要的概念,在深度学习以及各种计算框架下,都使用了这样一个概念。它告诉我们如何处理不同形状之间数组的计算,一般来说,是较小的数组被broadcast较大的数组中计算。但是对于用户来说很多时候也许不太容易理解,这次新增的numpy.broadcast_shapes方法可以直接让我们看到不同形状的计算结果如何。
>>> np.broadcast_shapes((1 , 2 ), (3 , 1 ))
(3 , 2 )
>>> np.broadcast_shapes(2 , (3 , 1 ))
(3 , 2 )
>>> np.broadcast_shapes((6 , 7 ), (5 , 6 , 1 ), (7 ,), (5 , 1 , 7 ))
(5 , 6 , 7 )
这可以帮助我们在构造计算时候更加清楚自己在做什么,真的是新手的福音啊。哈哈。
二、废弃的内容 这次新版本废弃的东西还是需要大家注意的。对于之前编码不太规范的童鞋来说,如果更新了,很多代码可能就有问题了。
2.1、废弃np.int首先是np.int被废弃,这个是几乎等同于Python内置的int方法。但是对于新手来说很容易困惑,类似这样的方法还有np.float等。这次彻底废弃了,让大家不再困惑。
2.2、shape=None与shape=()开始不同其次是方法中如果传递了shape=None的参数要注意,之前这个参数与shape=()是同等含义的。但是最新的方法中这两者已经有区别了。如果之前有混用要注意。
2.3、超出索引值报错此外,如果索引为空的情况会被报错,之前超出索引的情况返回了0,未来会报错了。如下情况会报错,目前会告警大家,需要注意。
arr1 = np.zeros((5 , 0 ))
arr1[[20 ]]
arr2 = np.zeros((5 , 5 ))
arr2[[20 ], :0 ]
2.4、mode与searchside不支持错误拼写之前对于一些错误的参数,NumPy自动更正,以后会报错了。如下:
import numpy as np
arr = np.array([[3 , 6 , 6 ], [4 , 5 , 1 ]])
np.ravel_multi_index(arr, (7 , 6 ), mode="clap" )
np.searchsorted(arr[0 ], 4 , side='random' )
2.5、废弃numpy.dual
2.6、矩阵的outer方法被废弃