登录
注册
原创博客
(current)
算法案例
(current)
期刊会议
学术世界
领域期刊
SCI/SCIE/SSCI/EI简介
期刊列表
会议列表
所有期刊分区
学术期刊信息检索
JCR期刊分区查询
CiteScore期刊分区查询
中科院期刊分区查询
领域期刊分区
管理 - UTD24期刊列表
管理 - AJG(ABS)期刊星级查询
管理 - FMS推荐期刊列表
计算机 - CCF推荐期刊会议列表
高校期刊分区
南大核心(CSSCI)
合工大小核心
合工大大核心
AI资源仓库
AI论文快讯
AI预训练模型
AI数据集
AI开源工具
数据推荐
价值评估
数据集评分
AI工具评分
论文评分
专利列表
专利检索
科技大数据评估系统
网址导航
我的网址导航
程序员必备网站
NumPy新版本发布了~~1.20.0横空出世
标签:
#numpy#
#python#
时间:2021/01/31 16:31:21
作者:小木
## 简介 NumPy是Python中非常优秀的一个数据科学工具包,使用Python做数据分析的童鞋几乎是必备的工具。NumPy的提供了非常丰富的计算能力,但是底层是C语言实现的,因此既有Python语法的低门槛,速度上却依然非常好。NumPy本身也和Pandas、SciPy一起成为一种生态了。

今天,NumPy发布了1.20.0最新版本,这个版本的改动很大。值得童鞋们关注~ 这个版本支持Python3.7-3.9(注意,3.6已经被抛弃了哦)。由184位贡献者实现了684个PRs。主要的变化如下: 1. NumPy函数的注释。这项工作还在进行中,预计会在用户反馈的基础上进行改进。 3. 更广泛地使用SIMD来提高ufuncs的执行速度。在引入通用函数方面已经做了很多工作,这些通用函数将方便在不同硬件平台上使用新功能。这项工作还在进行中。 5. 对dtype和casting实现的改造,以便为扩展dtypes提供一个更容易的途径。这项工作还在进行中,但已经做了足够的实验和反馈。 7. 广泛的文档改进,包括大约 185 个 PR 合并。这项工作正在进行中,是改进对新用户有用性的大项目的一部分。 9. 进一步清理与移除 Python 2.7 有关的内容。这提高了代码的可读性,并消除了一些技术债务。 11. 对即将到来的 Cython 3.0 的初步支持。 接下来,我们看看其中比较重要的一些内容 [TOC] ## 一、NumPy1.20.0的新函数 ### 1.1、数组新的“洗牌”方法 首先我们看一下随机生成器里面新增的一个方法,即permuted方法。终于新增了一个这样实用的按维度随机重排数组的方法了。 在此之前已经有shuffle和permutation了,这两个方法是对数组进行进行随机重排列的方法,区别在于一个是数组本身重排列,另一个是重排列结果返回一个副本。但是这两个随机重排列的方法都只能针对数组中的某一个维度,也就是说只能随机重排某一个维度下的数组。对于多维数据,如二维数据为例,它只能让所有的行或者列都按一种方式重排。 如下的例子: ```python >>> 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], # random [ 6, 8, 7, 5, 9], [11, 13, 12, 10, 14]]) ``` 可以看到,这种重排方式就是第0列变成了第3列,第2列变成了第0列,等等。 而新增的permuted方法则可以每一个维度独立重排。 ```python >>> rg.permuted(x, axis=1) array([[ 1, 0, 2, 4, 3], # random [ 5, 7, 6, 9, 8], [10, 14, 12, 13, 11]]) ``` 可以看到,每一行都是相互独立的随机重排了。 ### 1.2、新增滑动窗口查看方法 在一些与时间有关的问题中,滑动窗口是一个非常重要的工具,比如从某一个时刻开始,一次按照多少步长滑动,到下一个时刻的数据中。 新增的numpy.lib.stride_tricks.sliding_window_view 方法可以让我们按照这种方式去查看数据。此前,NumPy并没有提供这样的方法供我们使用,其它方法也都效率不太好。 当然这个问题本身就很麻烦,毕竟如果一个很大的序列,用一个窗口去滑动效率就不高,尤其是序列很长,窗口很小的时候,目前NumPy提供的这个方法算是一个比较高效的解决方案了。 示例如下: ```python >>> 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方法可以直接让我们看到不同形状的计算结果如何。 如下: ```python >>> 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,未来会报错了。如下情况会报错,目前会告警大家,需要注意。 ```python arr1 = np.zeros((5, 0)) arr1[[20]] arr2 = np.zeros((5, 5)) arr2[[20], :0] ``` ### 2.4、mode与searchside不支持错误拼写 之前对于一些错误的参数,NumPy自动更正,以后会报错了。如下: ```python import numpy as np arr = np.array([[3, 6, 6], [4, 5, 1]]) # mode: inexact match np.ravel_multi_index(arr, (7, 6), mode="clap") # should be "clip" # searchside: inexact match np.searchsorted(arr[0], 4, side='random') # should be "right" ``` ### 2.5、废弃numpy.dual ### 2.6、矩阵的outer方法被废弃
相关博客
最热博客