NumPy-1-26-中文文档-二十四-
NumPy 1.26 中文文档(二十四)
NumPy 治理
-
NumPy 项目治理和决策
-
摘要
-
项目情况
-
治理
-
社区基于共识的决策
-
指导委员会
-
-
机构合作伙伴和资金支持
-
文档历史
-
致谢
-
许可证
-
如何为 NumPy 文档做出贡献
本指南将帮助您决定要贡献什么,以及如何将其提交给官方 NumPy 文档。
文档团队会议
NumPy 社区已经确立了改进其文档的坚定目标。我们定期在 Zoom 上举行文档会议(日期在numpy-discussion 邮件列表上宣布),欢迎每个人参与。如果你有问题或需要有人指导你迈出第一步 - 我们很乐意帮助。 会议记录在hackmd.io上,存储在NumPy 存档存储库中。
需要什么
NumPy 文档已经详细涵盖了细节。 API 参考文档直接从代码中的docstrings生成,当构建文档时。尽管我们对用户公开的每个函数和类都有大致完整的参考文档,但是一些函数缺乏使用示例。
我们缺少的是更广泛范围的文档 - 教程,如何做以及解释。报告缺陷是另一种贡献的方式。 我们都在讨论。
贡献修复
我们渴望听到并修复文档缺陷。 但要解决最大的问题,我们最终不得不推迟或忽略一些错误报告。 以下是要解决的最佳缺陷。
首要任务是技术错误 - 缺少参数的文档字符串,函数/参数/方法的错误描述等。 其他“结构性”缺陷,如损坏的链接也优先处理。 所有这些修复都易于确认并放置。 如果你知道如何做,你可以提交一个拉取请求(PR)来修复,否则请提交一个问题。
拼写错误和拼写错误处于较低的层次; 我们乐意听到它们,但可能无法迅速修复。 这些也可以作为拉取请求或问题来处理。
显而易见的措辞错误(比如漏掉了“不”)属于拼写错误类别,但其他重新措辞 - 甚至是语法 - 需要判断,这提高了经营难度。 通过首先将修复作为问题呈现,了解一下情况。
一些在 C 扩展模块中定义的函数/对象,如 numpy.ndarray.transpose, numpy.array 等,在_add_newdocs.py中有其单独定义的文档字符串。
贡献新页面
你在使用我们文档时的挫败感是我们修复问题的最佳指南。
如果您撰写了一个缺失的文档,您就加入了开源的最前线,但仅仅告诉我们缺少了什么就是一项有意义的贡献。如果您想撰写文档,请向邮件列表征求意见和反馈。如果您想提醒我们有差距,请提出问题。参见此问题作为示例。
如果您正在寻找主题,我们的官方文档路线图是NumPy 增强提案(NEP),NEP 44 - 重组 NumPy 文档。它确定了我们文档需要帮助的领域,并列出了我们想要看到的几个补充内容,包括 Jupyter 笔记本。
文档框架
有写作有用文件的公式,四个公式几乎覆盖了所有内容。有四个公式是因为文档有四个类别——教程、操作指南、说明和参考资料。认识到文档以这种方式划分是 Daniele Procida 及其Diátaxis Framework的洞察。当您开始撰写文档或提议文档时,请考虑它将属于这四种类型中的哪种。### NumPy 教程
除了 NumPy 源代码树中的文档之外,您还可以将内容以 Jupyter Notebook 格式提交到NumPy 教程页面。这套教程和教育材料旨在为 NumPy 项目提供高质量资源,既供自学使用,也供教学使用。这些资源是在单独的 GitHub 存储库numpy-tutorials中开发的,您可以在那里查看现有的笔记本,提出问题以建议新主题或提交自己的教程作为拉取请求。### 更多有关贡献的信息
如果英语不是您的母语,或者您只能提出初步草稿,不用担心。开源是一个社区的努力。尽力而为——我们将帮助解决问题。
图像和现实数据使文本更引人入胜和有力,但请确保您使用的内容具有适当的许可和可用性。同样,即使是艺术作品的初步构思也可以被他人打磨。
现在,NumPy 接受的唯一数据格式是其他 Python 科学库如 pandas、SciPy 或 Matplotlib 所使用的格式。我们正在开发一个包,可以接受更多格式;有关详情,请联系我们。
NumPy 文档保留在源代码树中。要将您的文档放入文档库,您必须下载该源代码树,构建它,并提交一个拉取请求。如果 GitHub 和拉取请求对您来说是新的,请查阅我们的贡献者指南。
我们使用的标记语言是 reStructuredText (rST),它比 Markdown 更为复杂。Sphinx 是许多 Python 项目用来构建和链接项目文档的工具,它会将 rST 转换为 HTML 和其他格式。想了解更多关于 rST 的信息,可以查看 Quick reStructuredText Guide 或 reStructuredText Primer。
间接贡献
如果你发现任何可以补充到 NumPy 文档的有用材料,请通过 提交 issue 告诉我们。
你不需要直接为 NumPy 做贡献也能有所贡献。如果你在自己的博客上写了一篇教程、创建了 YouTube 视频、或者在 Stack Overflow 等网站上回答了问题,那都算是你的贡献。
文档风格
用户文档
-
总的来说,我们遵循 Google 开发者文档风格指南 来编写用户指南。
-
NumPy 风格适用于以下情况:
- Google 没有相关指导,或者
- 我们更喜欢不使用 Google 样式。
我们当前的规则:
- 我们将 index 词汇复数形式使用 indices,而不是 indexes,这遵循了
numpy.indices的先例。 - 为保持一致性,我们也将 matrix 复数形式使用 matrices。
-
未能被 NumPy 或 Google 规则充分解决的语法问题,由最新版 芝加哥手册中"语法和用法"一节决定。
-
我们欢迎大家 报告 应该添加到 NumPy 风格规则中的案例。 ### 文档字符串
当将 Sphinx 与 NumPy 约定一起使用时,你应该使用 numpydoc 扩展,这样你的文档字符串就会被正确处理。例如,Sphinx 会从你的文档字符串中提取 Parameters 部分并将其转换为字段列表。使用 numpydoc 还能避免 Sphinx 在遇到 NumPy 文档字符串约定(如部分标题 -------------)时产生的 reStructuredText 错误,因为这些约定 Sphinx 并不会在文档字符串中预料到。
NumPy 文档可以从以下网站获取:
请注意,对于 NumPy 内部的文档,在示例开头无需执行 import numpy as np。
请使用 numpydoc 格式标准,如他们的 示例所示。 ### 记录 C/C++ 代码
NumPy 使用Doxygen来解析特殊格式的 C/C++注释块。这生成 XML 文件,然后由Breathe转换为 RST,Sphinx 使用它。
完成文档化过程需要三个步骤:
1.编写注释块
尽管目前仍未设置要遵循的注释样式,但由于与当前现有的非索引注释块的相似之处,Javadoc 比其他注释更受欢迎。
注意
请参阅“代码文档化”。
这就是 Javadoc 样式的效果:
/**
* This a simple brief.
*
* And the details goes here.
* Multi lines are welcome.
*
* @param num leave a comment for parameter num.
* @param str leave a comment for the second parameter.
* @return leave a comment for the returned value.
*/
int doxy_javadoc_example(int num, const char *str);
这就是它的呈现方式:
int doxy_javadoc_example(int num, const char *str)
这是一个简单的简短描述。
详细信息在这里。欢迎多行。
参数:
-
num – 为参数 num 添加注释。
-
str – 为第二个参数添加注释。
返回:
返回值添加注释。
对于行内注释,您可以使用三斜杠。例如:
/**
* Template to represent limbo numbers.
*
* Specializations for integer types that are part of nowhere.
* It doesn't support with any real types.
*
* @param Tp Type of the integer. Required to be an integer type.
* @param N Number of elements.
*/
template<typename Tp, std::size_t N>
class DoxyLimbo {
public:
/// Default constructor. Initialize nothing.
DoxyLimbo();
/// Set Default behavior for copy the limbo.
DoxyLimbo(const DoxyLimbo<Tp, N> &l);
/// Returns the raw data for the limbo.
const Tp *data();
protected:
Tp p_data[N]; ///< Example for inline comment.
};
这就是它的呈现方式:
template<typename Tp, std::size_t N> class DoxyLimbo
代表悬崖数字的模板。
无处不在的整数类型的特殊化。它不支持任何真实的类型。
参数 Tp:
整数类型。需要是整数类型。
参数 N:
元素数量。
公共函数
DoxyLimbo()
默认构造函数。不初始化任何内容。
DoxyLimbo(const <, > &l)
设置复制悬崖的默认行为。
const *data()
返回悬崖的原始数据。
受保护的属性
p_data[]
内联注释示例。
常见的 Doxygen 标签:
注意
更多标签/命令,请查看www.doxygen.nl/manual/commands.html。
@brief
开始一个用作简短描述的段落。默认情况下,文档块的第一句自动被视为简短描述,因为在 doxygen 配置中启用了选项JAVADOC_AUTOBRIEF。
@details
就像@brief开始一个简短描述,@details开始详细描述。您还可以开始新段落(空行),然后不需要@details命令。
@param
为函数参数
@return
开始为函数返回值描述。多个相邻的@return命令将合并为一个段落。当遇到空行或其他分段命令时,@return描述结束。
@code/@endcode
开始/结束一个代码块。代码块与普通文本不同。它被解释为源代码。
@rst/@endrst
开始/结束一个 reST 标记块。
示例
看以下示例:
/**
* A comment block contains reST markup.
* @rst
* .. note::
*
* Thanks to Breathe_, we were able to bring it to Doxygen_
*
* Some code example::
*
* int example(int x) {
* return x * 2;
* }
* @endrst
*/
void doxy_reST_example(void);
这就是它的呈现方式:
void doxy_reST_example(void)
注释块包含 reST 标记。
一些代码示例:
int example(int x) {
return x * 2;
}
注意
2. 馈送 Doxygen
并非所有的头文件都会自动收集。你必须在 Doxygen 的子配置文件中添加所需的 C/C++ 头文件路径。
子配置文件的唯一名称为 .doxyfile,通常可以在包含有文档化头文件的目录附近找到。如果靠近(2 深度)你想添加的头文件的路径中没有配置文件,则需要创建一个新的配置文件。
子配置文件可以接受任何 Doxygen 配置选项,但不要覆盖或重新初始化任何配置选项,而只使用连接运算符 “+=”。例如:
# to specify certain headers
INPUT += @CUR_DIR/header1.h \
@CUR_DIR/header2.h
# to add all headers in certain path
INPUT += @CUR_DIR/to/headers
# to define certain macros
PREDEFINED += C_MACRO(X)=X
# to enable certain branches
PREDEFINED += NPY_HAVE_FEATURE \
NPY_HAVE_FEATURE2
注意
@CUR_DIR 是一个模板常量,返回子配置文件的当前目录路径。
3. 包含指令
Breathe 提供了广泛的自定义指令,允许将 Doxygen 生成的文档转换为 reST 文件。
注意
欲了解更多信息,请查看“指令与配置变量”
常见指令:
doxygenfunction
这个指令生成单个函数的适当输出。函数名在项目中必须是唯一的。
.. doxygenfunction:: <function name>
:outline:
:no-link:
查看 示例 以查看它的工作原理。
doxygenclass
这个指令生成单个类的适当输出。它接受标准项目、路径、大纲和无链接选项,还有成员、protected-members、private-members、undoc-members、membergroups 和 members-only 选项:
.. doxygenclass:: <class name>
:members: [...]
:protected-members:
:private-members:
:undoc-members:
:membergroups: ...
:members-only:
:outline:
:no-link:
查看 doxygenclass 文档 https://breathe.readthedocs.io/en/latest/class.html#class-example 获取更多详细信息并查看其工作原理。
doxygennamespace
这个指令生成命名空间内容的适当输出。它接受标准项目、路径、大纲和无链接选项,还有 content-only、members、protected-members、private-members 和 undoc-members 选项。要引用嵌套的命名空间,必须提供完整的命名空间路径,例如 foo::bar 表示 foo 命名空间内的 bar 命名空间。
.. doxygennamespace:: <namespace>
:content-only:
:outline:
:members:
:protected-members:
:private-members:
:undoc-members:
:no-link:
查看 doxygennamespace 文档 获取更多详细信息并查看其工作原理。
doxygengroup
这个指令生成 Doxygen 组的适当输出。可以使用特定的 Doxygen 标记在源注释中声明 Doxygen 组,详见 doxygen 分组文档。
它接受标准项目、路径、大纲和无链接选项,还有 content-only、members、protected-members、private-members 和 undoc-members 选项。
.. doxygengroup:: <group name>
:content-only:
:outline:
:members:
:protected-members:
:private-members:
:undoc-members:
:no-link:
:inner:
了解更多细节并查看演示,请参阅doxygengroup 文档。
阅读文档
-
技术写作领域的领先组织Write the Docs举办会议,提供学习资源,并运营一个 Slack 频道。
-
谷歌的技术写作资源合集中写道:“每个工程师都是作家”,其中包括为开发人员提供规划和撰写文档的免费在线课程。
-
Software Carpentry(软件工程)的使命是教授研究人员软件知识。除了提供课程,该网站还解释了如何有效地展示思想。
文档团队会议
NumPy 社区已经确立了改进文档的明确目标。我们在 Zoom 上定期举行文档会议(会议日期在numpy-discussion 邮件列表上公布),欢迎大家参加。如果你有疑问或需要有人指导你的初步步骤,随时联系我们,我们很乐意帮助。会议记录保存在hackmd.io上,并存储在NumPy Archive 仓库中。
需要什么
NumPy 文档已经涵盖了详细内容。API 参考文档直接从代码中的文档字符串生成,当生成文档时(如何构建文档),它们会为用户展示每个函数和类的参考文档,但部分函数缺乏使用示例。
我们缺乏范围更广泛的文档 - 教程,操作说明和解释。报告缺陷是另一种贡献方式。我们都讨论。
贡献修复
我们渴望听到并修复文档缺陷。但是为了解决最大的问题,我们不得不推迟或忽视一些缺陷报告。以下是优先处理的最佳缺陷。
最重要的是技术错误 - 缺少参数的文档字符串,对函数/参数/方法的错误描述等。其他“结构性”缺陷(例如损坏的链接)也会被优先处理。所有这些修复都很容易确认并实施。如果您知道如何操作,请提交 pull 请求 (PR)进行修正;否则,请打开一个问题。
拼写错误和拼写错误居于更低的位置;我们欢迎了解这种错误,但可能无法及时修复。这些问题也可以作为 pull 请求或问题处理。
显而易见的用词错误(例如遗漏了“not”)属于拼写错误类别,但是其他的改写 - 甚至是语法上的改写 - 需要判断,这增加了难度。可以首先将修复作为问题发表,以试探反应。
一些函数/对象,如 numpy.ndarray.transpose、numpy.array 等,在 C 扩展模块中定义,其文档字符串在_add_newdocs.py中单独定义。
贡献新页面
您对我们文档的使用中的困扰是改进的最好指南。
如果您编写一份缺失的文档,您就加入了开源界的前线,但光是让我们知道缺了些什么就已经是一项有意义的贡献。如果您想编写一份文档,请通过邮件列表与我们进一步讨论想法和获取反馈。如果您想告诉我们有什么遗漏,请创建一个问题。你可以参考这个问题作为示例。
如果你在寻找话题,我们正式的文件路线图是一个NumPy Enhancement Proposal (NEP),NEP 44 - 重组 NumPy 文档。它确定了我们的文档需要帮助和我们想要看到的若干补充内容的领域,包括 Jupyter notebooks。
文档框架
有关编写有用文档的公式,有四个公式包含几乎所有内容。之所以有四个公式,是因为有四类文档 - 教程、操作指南、解释和参考文献。文档被分成这种方式的洞察力归功于 Daniele Procida 及其Diátaxis Framework。当您开始编写或提议一份文档时,请考虑一下它将属于这四种类型中的哪一种。 ### NumPy 教程
除了包含在 NumPy 源代码树中的文档之外,您还可以将内容以 Jupyter Notebook 格式提交到NumPy Tutorials 页面。这套教程和教育材料旨在为 NumPy 项目提供高质量的资源,供自学和教授课程使用。这些资源是在一个单独的 GitHub 仓库 numpy-tutorials 中开发的,您可以查看现有的笔记本,提出问题以建议新主题,或者以拉取请求的方式提交自己的教程。 ### 关于贡献的更多信息
如果英语不是您的母语,或者您只能草拟出一个简略版本,不要担心。开源是一个社区的努力。尽力而为 - 我们会帮助修复问题。
图像和真实数据使文本更具吸引力和强大,但请确保您使用的内容具有适当的许可和可用性。在这方面,即使是一个粗略的艺术构思也可以由其他人润色。
目前,NumPy 只接受由其他 Python 科学库(如 pandas、SciPy 或 Matplotlib)使用的数据格式。我们正在开发一个可以接受更多格式的包;有关详细信息,请与我们联系。
NumPy 文档保存在源代码树中。要将您的文档添加到文档库中,您必须下载树状结构,构建它,然后提交拉取请求。如果 GitHub 和拉取请求对您来说是新的,请查看我们的 Contributor Guide。
我们的标记语言是 reStructuredText(rST),比 Markdown 更复杂。Sphinx 是许多 Python 项目用于构建和链接项目文档的工具,可将 rST 转换为 HTML 和其他格式。有关 rST 的更多信息,请参阅Quick reStructuredText Guide 或 reStructuredText Primer 文档框架
有写有用文档的公式,其中有四个公式几乎涵盖了所有内容。有四个公式是因为文档有四个分类 - 教程,操作指南,解释和参考文献。文档的这种划分方式属于 Daniele Procida 及其Diátaxis Framework的见解。在开始编写文档或提出文档建议时,请考虑它将属于哪种类型。
NumPy 教程
除了 NumPy 源代码树中的文档之外,您还可以将内容以 Jupyter Notebook 格式提交到NumPy Tutorials页面。这组教程和教育材料旨在为 NumPy 项目提供高质量的资源,既可用于自学,也可用于授课。这些资源是在一个单独的 GitHub 存储库numpy-tutorials中开发的,您可以查看现有的笔记本,开启问题以建议新主题,或者提交您自己的教程作为拉取请求。
更多贡献内容
如果英语不是您的母语,或者只能提供初稿,不要担心。开源是一个社区的努力。尽力而为 - 我们会帮助解决问题的。
图片和现实数据使文本更具吸引力和影响力,但请确保您使用的内容具有适当的许可证并可供使用。同样,在设计艺术品时,即使有一个初步的想法,也可以由其他人进一步完善。
目前,NumPy 仅接受其他 Python 科学库(如 pandas、SciPy 或 Matplotlib)也使用的数据格式。我们正在开发一种可以接受更多格式的软件包;有关详细信息,请与我们联系。
NumPy 文档保存在源代码树中。要将您的文档添加到文档库中,您必须下载树状结构,构建它,然后提交拉取请求。如果 GitHub 和拉取请求对您来说是新的,请查看我们的 Contributor Guide。
我们的标记语言是比 Markdown 更精细的 reStructuredText(rST)。Sphinx,许多 Python 项目用于构建和链接项目文档的工具,将 rST 转换为 HTML 和其他格式。有关 rST 的更多信息,请参阅 快速 reStructuredText 指南 或 reStructuredText 入门
间接贡献
如果您找到外部资料对 NumPy 文档有用,请通过 提出问题 告诉我们。
要为 NumPy 做贡献,您不必在此处做贡献。如果您在博客上撰写教程、制作 YouTube 视频或在 Stack Overflow 和其他网站上回答问题,则表示您已经做出了贡献。
文档风格
用户文档
-
通常,我们遵循Google 开发者文档样式指南 作为用户指南。
-
NumPy 样式适用于以下情况:
- Google 没有指导,或
- 我们更喜欢不使用 Google 样式
我们当前的规则:
- 我们将 index 复数形式为 indices 而不是 indexes ,遵循
numpy.indices的先例。 - 为了一致性,我们还将 matrix 复数形式为 matrices。
-
由 NumPy 或 Google 规则不足解决的语法问题由最新版本的 芝加哥风格手册 中的 “语法和用法” 部分决定。
-
我们欢迎 报告 应添加到 NumPy 样式规则中的案例。### 文档字符串
当使用 Sphinx 与 NumPy 约定结合时,应使用 numpydoc 扩展,以便正确处理您的文档字符串。例如,Sphinx 将从您的文档字符串中提取 Parameters 部分并将其转换为字段列表。使用 numpydoc 还可以避免在遇到 NumPy 文档字符串约定时产生的 reStructuredText 错误,例如部分标题(例如 -------------),这是 Sphinx 不希望在文档字符串中找到的。
它可从以下位置获取:
请注意,对于 NumPy 内的文档,不需要在示例开头执行 import numpy as np。
请使用 numpydoc 格式标准,如它们的 示例 中所示。### 记录 C/C++ 代码
NumPy 使用Doxygen来解析特殊格式的 C/C++ 注释块。这会生成 XML 文件,然后由Breathe转换为 RST,最后由 Sphinx 使用。
完成文档过程需要三个步骤:
1. 编写注释块
尽管仍然没有设置要遵循的注释样式,但由于与当前现有的非索引注释块的相似之处,Javadoc 更可取。
注意
请参阅“文档化代码”。
这是 Javadoc 风格的样子:
/**
* This a simple brief.
*
* And the details goes here.
* Multi lines are welcome.
*
* @param num leave a comment for parameter num.
* @param str leave a comment for the second parameter.
* @return leave a comment for the returned value.
*/
int doxy_javadoc_example(int num, const char *str);
以及它的渲染方式:
int doxy_javadoc_example(int num, const char *str)
这是一个简单的简要。
详细信息在此处。多行欢迎。
参数:
-
num – 为参数 num 留下注释。
-
str – 为第二个参数留下注释。
返回:
为返回的值留下注释。
对于行注释,您可以使用三条正斜杠。例如:
/**
* Template to represent limbo numbers.
*
* Specializations for integer types that are part of nowhere.
* It doesn't support with any real types.
*
* @param Tp Type of the integer. Required to be an integer type.
* @param N Number of elements.
*/
template<typename Tp, std::size_t N>
class DoxyLimbo {
public:
/// Default constructor. Initialize nothing.
DoxyLimbo();
/// Set Default behavior for copy the limbo.
DoxyLimbo(const DoxyLimbo<Tp, N> &l);
/// Returns the raw data for the limbo.
const Tp *data();
protected:
Tp p_data[N]; ///< Example for inline comment.
};
以及它的渲染方式:
template<typename Tp, std::size_t N> class DoxyLimbo
表示盲目数字的模板。
整数类型的专业化,属于无处。它不支持任何实际类型。
Param Tp:
整数的类型。必须是整数类型。
Param N:
元素数量。
公共函数
DoxyLimbo()
默认构造函数。什么也不初始化。
DoxyLimbo(const <, > &l)
设置复制盲目的默认行为。
const *data()
返回盲目的原始数据。
受保护的属性
p_data[]
内联注释示例。
常见的 Doxygen 标签:
注意
如需更多标签/命令,请参阅www.doxygen.nl/manual/commands.html
@brief
开始用作简要描述的段落。默认情况下,文档块的第一句话会自动被视为简要描述,因为在 doxygen 配置中启用了选项JAVADOC_AUTOBRIEF。
@details
就像@brief开始一个简要描述一样,@details开始详细描述。您也可以开始一个新的段落(空行),然后不需要@details命令。
@param
开始一个函数参数的参数描述,参数名为
@return
为函数设置返回值描述。多个相邻的@return命令将合并为一个段落。当遇到空行或其他分段命令时,@return描述结束。
@code/@endcode
开始/结束一个代码块。代码块与普通文本有所不同。它被解释为源代码。
@rst/@endrst
开始/结束一个 reST 标记块。
示例
看下面的示例:
/**
* A comment block contains reST markup.
* @rst
* .. note::
*
* Thanks to Breathe_, we were able to bring it to Doxygen_
*
* Some code example::
*
* int example(int x) {
* return x * 2;
* }
* @endrst
*/
void doxy_reST_example(void);
以及它的渲染方式:
void doxy_reST_example(void)
注释块包含 reST 标记。
一些代码示例:
int example(int x) {
return x * 2;
}
注意
2. 引导 Doxygen
并非所有的头文件都会被自动收集。你必须在 Doxygen 的子配置文件中添加所需的 C/C++ 头文件路径。
子配置文件具有独特的名称.doxyfile,通常可以在包含文档头文件的目录附近找到。如果要添加的头文件所在路径(2 层深度)没有配置文件,就需要创建一个新的配置文件。
子配置文件可以接受任何 Doxygen 配置选项,但不应覆盖或重新初始化任何配置选项,而是只使用连接运算符“+=”。例如:
# to specify certain headers
INPUT += @CUR_DIR/header1.h \
@CUR_DIR/header2.h
# to add all headers in certain path
INPUT += @CUR_DIR/to/headers
# to define certain macros
PREDEFINED += C_MACRO(X)=X
# to enable certain branches
PREDEFINED += NPY_HAVE_FEATURE \
NPY_HAVE_FEATURE2
注意
@CUR_DIR 是一个模板常量,返回子配置文件的当前目录路径。
3. 包含指令
Breathe 提供了各种自定义指令,允许将 Doxygen 生成的文档转换为 reST 文件。
注意
欲获取更多信息,请查阅“指令和配置变量”
常见指令:
doxygenfunction
此指令生成单个函数的适当输出。项目中函数名必须唯一。
.. doxygenfunction:: <function name>
:outline:
:no-link:
查看 示例 以了解它的运作方式。
doxygenclass
此指令生成单个类的适当输出。它使用标准项目、路径、大纲和无链接选项,另外还有成员、受保护成员、私有成员、未记录成员、成员组和仅成员选项。
.. doxygenclass:: <class name>
:members: [...]
:protected-members:
:private-members:
:undoc-members:
:membergroups: ...
:members-only:
:outline:
:no-link:
了解 doxygenclass 文档 https://breathe.readthedocs.io/en/latest/class.html#class-example 以获取更多详细信息,并了解它的运作方式。
doxygennamespace
此指令生成命名空间内容的适当输出。它使用标准项目、路径、大纲和无链接选项,另外还有仅内容、成员、受保护成员、私有成员和未记录成员选项。要引用嵌套命名空间,必须提供完整的命名空间路径,例如 foo::bar 表示 foo 命名空间内的 bar 命名空间。
.. doxygennamespace:: <namespace>
:content-only:
:outline:
:members:
:protected-members:
:private-members:
:undoc-members:
:no-link:
查看 doxygennamespace 文档 以获取更多详细信息,并了解它的运作方式。
doxygengroup
此指令生成适当输出以展示 Doxygen 组的内容。doxygen 组可以通过源注释中特定的 doxygen 标记进行声明,参见 doxygen 组织文档。
它使用标准项目、路径、大纲和无链接选项,另外还有仅内容、成员、受保护成员、私有成员和未记录成员选项。
.. doxygengroup:: <group name>
:content-only:
:outline:
:members:
:protected-members:
:private-members:
:undoc-members:
:no-link:
:inner:
查看doxygengroup 文档以获取更多详细信息并查看其实际操作。 ### 用户文档
-
通常,我们遵循Google 开发者文档风格指南进行用户指南。
-
NumPy 风格适用于以下情况:
- Google 没有指导,或者
- 我们更喜欢不使用 Google 风格
我们当前的规则:
- 我们将index复数形式化为indices,而不是indexes,遵循
numpy.indices的先例。 - 为了保持一致性,我们也将matrix的复数形式化为matrices。
-
在 NumPy 或 Google 规则无法充分解决的语法问题将在最新版芝加哥风格手册“语法和用法”部分决定。
-
我们欢迎被提醒应该添加到 NumPy 风格规则中的案例。
文档字符串
当将Sphinx与 NumPy 约定结合使用时,应使用numpydoc扩展,以使您的文档字符串被正确处理。例如,Sphinx 将从您的文档字符串中提取Parameters部分并将其转换为字段列表。使用numpydoc还将避免纯 Sphinx 在遇到像部分标题(如-------------)这样的 NumPy 文档字符串约定时产生的 reStructuredText 错误,这是 Sphinx 不希望在文档字符串中找到的。
可从以下网址获取:
请注意,在 NumPy 文档中,不需要在示例开头执行import numpy as np。
请按照他们的numpydoc格式标准,如其示例所示。
C/C++代码文档化
NumPy 使用Doxygen来解析特殊格式的 C/C++注释块。这会生成 XML 文件,然后由Breathe转换为 RST,Sphinx 将使用它。
完成文档过程需要三个步骤:
1. 编写评论块
尽管尚未设定注释风格以遵循,但由于与当前现有的非索引评论块相似,Javadoc 比其他风格更可取。
注意
请参阅“代码文档化”。
这就是 Javadoc 风格的样子:
/**
* This a simple brief.
*
* And the details goes here.
* Multi lines are welcome.
*
* @param num leave a comment for parameter num.
* @param str leave a comment for the second parameter.
* @return leave a comment for the returned value.
*/
int doxy_javadoc_example(int num, const char *str);
以下是呈现方式:
int doxy_javadoc_example(int num, const char *str)
这是一个简单的简介。
详细信息在这里。 欢迎多行输入。
参数:
-
num – 为参数 num 留下注释。
-
str – 为第二个参数添加注释。
返回:
为返回的值添加注释。
对于行注释,你可以使用三个正斜杠。例如:
/**
* Template to represent limbo numbers.
*
* Specializations for integer types that are part of nowhere.
* It doesn't support with any real types.
*
* @param Tp Type of the integer. Required to be an integer type.
* @param N Number of elements.
*/
template<typename Tp, std::size_t N>
class DoxyLimbo {
public:
/// Default constructor. Initialize nothing.
DoxyLimbo();
/// Set Default behavior for copy the limbo.
DoxyLimbo(const DoxyLimbo<Tp, N> &l);
/// Returns the raw data for the limbo.
const Tp *data();
protected:
Tp p_data[N]; ///< Example for inline comment.
};
以下是它的呈现方式:
template<typename Tp, std::size_t N> class DoxyLimbo
用于表示深渊数字的模板。
不支持任何真实类型的整数类型的特化。
参数 Tp:
整数的类型。 必须是一个整数类型。
参数 N:
元素的数量。
公共函数
DoxyLimbo()
默认构造函数。不初始化任何内容。
DoxyLimbo(const <, > &l)
设置复制深渊的默认行为。
const *data()
返回深渊的原始数据。
受保护的属性
p_data[]
行内注释的示例。
Doxygen 常用标签:
注意
更多标签/命令,请参阅www.doxygen.nl/manual/commands.html
@brief
开始一个作为简要描述的段落。默认情况下,文档块的第一句话会被自动视为简要描述,因为 Doxygen 配置中启用了选项JAVADOC_AUTOBRIEF。
@details
就像 @brief 开始简短的描述一样,@details 开始详细的描述。你也可以开始一个新的段落(空行),然后 @details 命令就不再需要了。
@param
开始一个函数参数的参数描述,参数名为
@return
开始一个函数的返回值描述。 多个相邻的 @return 命令会合并成一个段落。当遇到空行或其他部分命令时,@return 描述结束。
@code/@endcode
开始/结束一个代码块。代码块会与普通文本区别对待。它被解释为源代码。
@rst/@endrst
开始/结束一个 reST 标记块。
示例
请看以下示例:
/**
* A comment block contains reST markup.
* @rst
* .. note::
*
* Thanks to Breathe_, we were able to bring it to Doxygen_
*
* Some code example::
*
* int example(int x) {
* return x * 2;
* }
* @endrst
*/
void doxy_reST_example(void);
以下是它的呈现方式:
void doxy_reST_example(void)
一个注释块包含 reST 标记。
一些代码示例:
int example(int x) {
return x * 2;
}
注意
2. 为 Doxygen 提供信息
并非所有头文件都会被自动收集。您必须在 Doxygen 的子配置文件中添加所需的 C/C++头路径。
子配置文件的唯一名称是.doxyfile,您通常可以在包含文档头文件的目录附近找到它。如果您想添加的头文件所在的路径中没有配置文件,您需要创建一个新的配置文件。
子配置文件可以接受Doxygen的任何配置选项,但不会覆盖或重新初始化任何配置选项,只使用连接操作符“+=”。例如:
# to specify certain headers
INPUT += @CUR_DIR/header1.h \
@CUR_DIR/header2.h
# to add all headers in certain path
INPUT += @CUR_DIR/to/headers
# to define certain macros
PREDEFINED += C_MACRO(X)=X
# to enable certain branches
PREDEFINED += NPY_HAVE_FEATURE \
NPY_HAVE_FEATURE2
注意
@CUR_DIR 是一个模板常量,返回子配置文件的当前目录路径。
3. Inclusion directives
Breathe 提供了丰富的自定义指令,允许将Doxygen生成的文档转换为 reST 文件。
注意
更多信息,请查阅 “Directives & Config Variables”
常用指令:
doxygenfunction
此指令会为单个函数生成相应输出。函数名称在项目中必须是唯一的。
.. doxygenfunction:: <function name>
:outline:
:no-link:
请查阅 示例 以实际操作。
doxygenclass
此指令会为单个类生成相应输出。它接受标准项目、路径、大纲和无链接选项,以及 members、protected-members、private-members、undoc-members、membergroups 和 members-only 选项:
.. doxygenclass:: <class name>
:members: [...]
:protected-members:
:private-members:
:undoc-members:
:membergroups: ...
:members-only:
:outline:
:no-link:
请查阅 doxygenclass 文档 https://breathe.readthedocs.io/en/latest/class.html#class-example 以获取更多详细信息并实际操作。
doxygennamespace
此指令会为命名空间的内容生成相应输出。它接受标准项目、路径、大纲和无链接选项,以及 content-only、members、protected-members、private-members 和 undoc-members 选项。要引用嵌套命名空间,必须提供完整的命名空间路径,例如 foo::bar 表示 foo 命名空间内的 bar 命名空间。
.. doxygennamespace:: <namespace>
:content-only:
:outline:
:members:
:protected-members:
:private-members:
:undoc-members:
:no-link:
请查阅 doxygennamespace 文档 以获取更多详细信息并实际操作。
doxygengroup
此指令会为 doxygen 组的内容生成相应输出。可以在源注释中使用特定的 doxygen 标记来声明 doxygen 组,详见 doxygen 分组文档。
它接受标准项目、路径、大纲和无链接选项,以及 content-only、members、protected-members、private-members 和 undoc-members 选项。
.. doxygengroup:: <group name>
:content-only:
:outline:
:members:
:protected-members:
:private-members:
:undoc-members:
:no-link:
:inner:
请查阅 doxygengroup 文档 以获取更多详细信息并实际操作。
1. Writing the comment blocks
虽然还没有设定要遵循的注释样式,但 Javadoc 与当前现有的非索引化注释块相似,因此更可取。
注意
Javadoc 样式如下:
/**
* This a simple brief.
*
* And the details goes here.
* Multi lines are welcome.
*
* @param num leave a comment for parameter num.
* @param str leave a comment for the second parameter.
* @return leave a comment for the returned value.
*/
int doxy_javadoc_example(int num, const char *str);
以下是渲染效果:
int doxy_javadoc_example(int num, const char *str)
这是一个简单简介。
具体内容如下。支持多行。
参数:
-
num – 在参数 num 上留下注释。
-
str – 在第二个参数上留下注释。
返回:
在返回值上留下注释。
对于行注释,您可以使用三个正斜杠。例如:
/**
* Template to represent limbo numbers.
*
* Specializations for integer types that are part of nowhere.
* It doesn't support with any real types.
*
* @param Tp Type of the integer. Required to be an integer type.
* @param N Number of elements.
*/
template<typename Tp, std::size_t N>
class DoxyLimbo {
public:
/// Default constructor. Initialize nothing.
DoxyLimbo();
/// Set Default behavior for copy the limbo.
DoxyLimbo(const DoxyLimbo<Tp, N> &l);
/// Returns the raw data for the limbo.
const Tp *data();
protected:
Tp p_data[N]; ///< Example for inline comment.
};
下面是如何呈现的:
template<typename Tp, std::size_t N> class DoxyLimbo
表示 limbo 数字的模板。
针对不存在任何实际类型的整数类型的特化。它不支持任何真实类型。
参数 Tp:
整数的类型。必须是整数类型。
参数 N:
元素的数量。
公共函数
DoxyLimbo()
默认构造函数。不初始化任何内容。
DoxyLimbo(const <, > &l)
设置将 limbo 复制的默认行为。
const *data()
返回 limbo 的原始数据。
保护属性
p_data[]
行内注释示例。
常见的 Doxygen 标签:
注意
更多标签/命令,请参考www.doxygen.nl/manual/commands.html。
@brief
开始作为简要描述的段落。默认情况下,文档块的第一句被自动视为简要描述,因为在 Doxygen 配置中启用了JAVADOC_AUTOBRIEF选项。
@details
就像@brief开始一个简要描述一样,@details开始详细描述。您也可以开始一个新段落(空行),然后不需要@details命令。
@param
开始函数参数
@return
开始函数的返回值描述。多个相邻的@return命令将被合并成一个段落。当遇到空行或其他分段命令时,@return描述结束。
@code/@endcode
开始/结束代码块。代码块被视为源代码而非普通文本。
@rst/@endrst
开始/结束 reST 标记块。
示例
看以下示例:
/**
* A comment block contains reST markup.
* @rst
* .. note::
*
* Thanks to Breathe_, we were able to bring it to Doxygen_
*
* Some code example::
*
* int example(int x) {
* return x * 2;
* }
* @endrst
*/
void doxy_reST_example(void);
下面是如何呈现的:
void doxy_reST_example(void)
一个注释块包含 reST 标记。
一些代码示例:
int example(int x) {
return x * 2;
}
注意
常见的 Doxygen 标签:
注意
更多标签/命令,请参考www.doxygen.nl/manual/commands.html。
@brief
开始作为简要描述的段落。默认情况下,文档块的第一句被自动视为简要描述,因为在 Doxygen 配置中启用了JAVADOC_AUTOBRIEF选项。
@details
就像@brief开始一个简要描述一样,@details开始详细描述。您也可以开始一个新段落(空行),然后不需要@details命令。
@param
开始函数参数描述,参数名为
@return
开始函数返回值描述。多个相邻的 @return 命令将连接成一个段落。当遇到空行或其他分段命令时,@return 描述结束。
@code/@endcode
开始/结束一段代码。代码块与普通文本不同。它被解释为源代码。
@rst/@endrst
开始/结束一段 reST 标记。
示例
请看下面的示例:
/**
* A comment block contains reST markup.
* @rst
* .. note::
*
* Thanks to Breathe_, we were able to bring it to Doxygen_
*
* Some code example::
*
* int example(int x) {
* return x * 2;
* }
* @endrst
*/
void doxy_reST_example(void);
以下是渲染的效果:
void doxy_reST_example(void)
注释块包含 reST 标记。
一些代码示例:
int example(int x) {
return x * 2;
}
注意
2. Doxygen 文档生成
并非所有标头文件都会自动收集。您必须在 Doxygen 的子配置文件中添加所需的 C/C++ 标头路径。
子配置文件具有唯一名称.doxyfile,您通常可以在包含文档化标头的目录附近找到它们。如果在您想要添加的标头所在的路径附近(2 层深度)找不到一个,则需要创建一个新的配置文件。
子配置文件可以接受任何Doxygen的配置选项,但不会覆盖或重新初始化任何配置选项,而只是使用连接运算符“+=”。例如:
# to specify certain headers
INPUT += @CUR_DIR/header1.h \
@CUR_DIR/header2.h
# to add all headers in certain path
INPUT += @CUR_DIR/to/headers
# to define certain macros
PREDEFINED += C_MACRO(X)=X
# to enable certain branches
PREDEFINED += NPY_HAVE_FEATURE \
NPY_HAVE_FEATURE2
注意
@CUR_DIR 是一个模板常量,返回子配置文件的当前目录路径。
3. 包含指令
Breathe提供了各种自定义指令,允许将Doxygen生成的文档转换为 reST 文件。
注意
更多信息,请查看“指令与配置变量”
常见指令:
doxygenfunction
此指令为单个函数生成适当的输出。项目中必须确保函数名唯一。
.. doxygenfunction:: <function name>
:outline:
:no-link:
查看示例以查看其运作方式。
doxygenclass
此指令生成单个类的适当输出。它接受标准项目、路径、大纲和无链接选项,另外还有成员、受保护成员、私有成员、未文档化成员、成员组和仅成员选项:
.. doxygenclass:: <class name>
:members: [...]
:protected-members:
:private-members:
:undoc-members:
:membergroups: ...
:members-only:
:outline:
:no-link:
查看 doxygenclass 文档 https://breathe.readthedocs.io/en/latest/class.html#class-example 以获取更多详情并查看其运作方式。
doxygennamespace
此指令用于生成命名空间的内容适当输出。它采用标准的项目、路径、大纲和无链接选项,并额外提供内容、成员、受保护的成员、私有成员和未记录的成员选项。要引用嵌套命名空间,必须提供完整的命名空间路径,例如 foo::bar 表示 foo 命名空间中的 bar 命名空间。
.. doxygennamespace:: <namespace>
:content-only:
:outline:
:members:
:protected-members:
:private-members:
:undoc-members:
:no-link:
查看doxygennamespace 文档以获取更多详细信息并查看其实际应用。
doxygengroup
此指令用于生成 doxygen 组的内容适当输出。可以通过源代码注释中的特定 doxygen 标记声明 doxygen 组,详见 doxygen 的分组文档。
它采用标准的项目、路径、大纲和无链接选项,还额外提供内容、成员、受保护的成员、私有成员和未记录的成员选项。
.. doxygengroup:: <group name>
:content-only:
:outline:
:members:
:protected-members:
:private-members:
:undoc-members:
:no-link:
:inner:
查看doxygengroup 文档以获取更多详细信息并查看其实际应用。
常见指令:
doxygenfunction
此指令用于生成单个函数的适当输出。函数名在项目中必须是唯一的。
.. doxygenfunction:: <function name>
:outline:
:no-link:
查看示例以查看实际应用。
doxygenclass
此指令用于生成单个类的适当输出。它采用标准的项目、路径、大纲和无链接选项,并额外提供成员、受保护的成员、私有成员、未记录的成员、成员组和仅成员选项:
.. doxygenclass:: <class name>
:members: [...]
:protected-members:
:private-members:
:undoc-members:
:membergroups: ...
:members-only:
:outline:
:no-link:
查看doxygenclass 文档https://breathe.readthedocs.io/en/latest/class.html#class-example_以获取更多详细信息并查看其实际应用。
doxygennamespace
此指令用于生成命名空间的内容适当输出。它采用标准的项目、路径、大纲和无链接选项,并额外提供内容、成员、受保护的成员、私有成员和未记录的成员选项。要引用嵌套命名空间,必须提供完整的命名空间路径,例如 foo::bar 表示 foo 命名空间中的 bar 命名空间。
.. doxygennamespace:: <namespace>
:content-only:
:outline:
:members:
:protected-members:
:private-members:
:undoc-members:
:no-link:
查看doxygennamespace 文档以获取更多详细信息并查看其实际应用。
doxygengroup
此指令用于生成 doxygen 组的内容适当输出。可以通过源代码注释中的特定 doxygen 标记声明 doxygen 组,详见 doxygen 的分组文档。
它采用标准的项目、路径、大纲和无链接选项,还额外提供内容、成员、受保护的成员、私有成员和未记录的成员选项。
.. doxygengroup:: <group name>
:content-only:
:outline:
:members:
:protected-members:
:private-members:
:undoc-members:
:no-link:
:inner:
查看doxygengroup 文档以获取更多详细信息并了解其运作方式。
文档阅读
-
技术文档撰写领域的领先组织Write the Docs举办会议,提供学习资源,并管理一个 Slack 频道。
-
谷歌的技术写作资源收藏表示:“每个工程师也是一名作家”,其中包括为开发人员规划和撰写文档提供的免费在线课程。
-
软件工坊的使命是向研究人员教授软件。除了提供课程内容外,该网站还解释了如何有效地展示观点。
发布说明
-
1.26.0
-
新增功能
-
numpy.array_api支持 Array API v2022.12 -
支持更新的 Accelerate BLAS/LAPACK 库
-
f2py的meson后端 -
f2py的bind(c)支持
-
-
改进
f2py支持iso_c_binding
-
构建系统变更
-
NumPy 特定的构建自定义化
-
构建依赖
-
故障排除
-
-
贡献者
-
合并的拉取请求
-
-
1.25.2
-
贡献者
-
合并的拉取请求
-
-
1.25.1
-
贡献者
-
合并的拉取请求
-
-
1.25.0
-
弃用功能
-
已过期的弃用功能
-
兼容性说明
-
np.pad使用mode=wrap填充将保持与原始数据的严格倍数 -
移除了 Cython 的
long_t和ulong_t -
当
axes参数错误时,改变了错误消息和类型以获取ufunc -
如果作为
where使用,则定义__array_ufunc__的数组类可以覆盖 ufuncs -
默认情况下,使用 NumPy C API 进行编译现在具有向后兼容性](release/1.25.0-notes.html#compiling-against-the-numpy-c-api-is-now-backwards-compatible-by-default)
-
-
新增功能
-
np.einsum现在可以接受objectdtype 的数组 -
添加支持原地矩阵乘法
-
添加了
NPY_ENABLE_CPU_FEATURES环境变量 -
NumPy 现在拥有一个
np.exceptions命名空间 -
np.linalg函数返回 NamedTuples -
np.char中的字符串函数与 NEP 42 自定义 dtype 兼容 -
可以从字符串抽象 DType 类创建字符串 DType 实例
-
富士通 C/C++ 编译器现在受支持
-
现在支持 SSL2
-
-
改进
-
NDArrayOperatorsMixin指定其没有__slots__ -
修复复数零的幂
-
新的
DTypePromotionError -
np.show_config 使用来自 Meson 的信息
-
修复
np.ma.diff在调用时不保留掩码的问题(使用参数 prepend/append) -
Cython 中对 NumPy C-API 的错误处理已更正
-
直接生成随机数生成器的能力
-
numpy.logspace现在支持非标量base参数 -
np.ma.dot()现在支持非 2d 数组 -
在 repr 中显式显示 .npz 文件的键
-
NumPy 现在在
np.dtypes中公开 DType 类 -
在 .npy 或 .npz 文件中保存之前删除 dtype 元数据
-
numpy.lib.recfunctions.structured_to_unstructured在更多情况下返回视图 -
有符号和无符号整数始终正确比较
-
-
性能改进和变更
-
AVX-512 启用处理器上的
np.argsort更快 -
AVX-512 启用处理器上的
np.sort更快 -
__array_function__机制现在更快 -
ufunc.at的速度可能更快 -
NpzFile上的成员测试更快
-
-
更改
-
大多数 NumPy 函数都被封装为 C 调用
-
C++ 标准库的使用
-
-
1.24.3
-
贡献者
-
已合并的拉取请求
-
-
1.24.2
-
贡献者
-
已合并的拉取请求
-
-
1.24.1
-
贡献者
-
已合并的拉取请求
-
-
1.24.0
-
弃用内容
-
弃用 fastCopyAndTranspose 和 PyArray_CopyAndTranspose
-
Python 整数超出范围的转换
-
弃用
msort -
np.str0和类似的现在已被弃用
-
-
过时的弃用内容
-
兼容性注意事项
-
array.fill(scalar)可能行为略有不同 -
子数组到对象的转换现在复制
-
返回的数组遵循 dtype kwarg 对象的唯一性
-
DLPack 导出引发
BufferError -
不再在 GCC-6 上测试 NumPy 构建
-
-
新功能
-
多项式类添加了新属性
symbol -
Fortran
character字符串的 F2PY 支持 -
新函数
np.show_runtime -
testing.assert_array_equal的strict选项 -
np.unique现在新增了equal_nan参数 -
对于
numpy.stack,使用casting和dtype关键字参数 -
对于
numpy.vstack,使用casting和dtype关键字参数 -
对于
numpy.hstack,使用casting和dtype关键字参数 -
可更改单例 RandomState 底层的位生成器
-
np.void现在有一个dtype参数
-
-
改进
-
F2PY 改进
-
IBM zSystems 矢量扩展设备(SIMD)
-
NumPy 现在在类型转换中报告浮点错误
-
F2PY 支持 value 属性
-
为第三方 BitGenerators 添加 pickle 支持
-
arange()现在明确失败,带有dtype=str -
numpy.typing协议现在可以在运行时进行检查
-
-
性能改进和变更
-
更快的
np.isin和np.in1d的版本,适用于整数数组 -
更快的比较运算符
-
-
变更
-
更好的整数除法溢出报告
-
masked_invalid现在原地修改掩码 -
nditer/NpyIter允许分配所有操作数
-
-
-
1.23.5
-
贡献者
-
合并的拉取请求
-
-
1.23.4
-
贡献者
-
合并的拉取请求
-
-
1.23.3
-
贡献者
-
合并的拉取请求
-
-
1.23.2
-
贡献者
-
合并的拉取请求
-
-
1.23.1
-
贡献者
-
合并的拉取请求
-
-
1.23.0
-
新函数
-
弃用
-
已过时的弃用
-
新功能
-
crackfortran 支持运算符和赋值重载
-
f2py 支持从派生类型语句中读取访问类型属性
-
genfromtxt新增参数ndmin -
np.loadtxt现在支持引号字符和单一转换函数 -
更改到不同大小的 dtype 现在只需要最后一个轴连续
-
F2PY 的确定性输出文件](release/1.23.0-notes.html#deterministic-output-files-for-f2py)
-
average的keepdims参数 -
np.unique新增参数equal_nan
-
-
兼容性注意事项
-
1D
np.linalg.norm保留浮点输入类型,即使结果是标量 -
结构化(void)dtype 升级和比较的变化
-
NPY_RELAXED_STRIDES_CHECKING已被移除 -
np.loadtxt已经有了几处变化
-
-
改进
-
ndarray.__array_finalize__现在可调用 -
添加对 VSX4/Power10 的支持
-
np.fromiter现在接受对象和子数组 -
Math C 库特性检测现在使用正确的签名
-
np.kron现在保留子类信息
-
-
性能改进和更改
-
更快的
np.loadtxt -
更快的约简运算符
-
更快的
np.where -
NumPy 标量的更快操作
-
更快的
np.kron
-
-
-
1.22.4
-
贡献者
-
合并的拉取请求
-
-
1.22.3
-
贡献者
-
合并的拉取请求
-
-
1.22.2
-
贡献者
-
合并的拉取请求
-
-
1.22.1
-
贡献者
-
合并的拉取请求
-
-
1.22.0
-
已过期废弃
-
已移除已废弃的数字风格 dtype 字符串
-
在 npyio 中
loads、ndfromtxt和mafromtxt的已过期废弃
-
-
废弃
-
在 mrecords 中使用 delimiter 而不是 delimitor 作为 kwarg
-
已废弃将布尔
kth值传递给 (arg-)partition -
已废弃
np.MachAr类
-
-
兼容性说明
-
Distutils 在 clang 上强制严格的浮点模型
-
已移除复数类型的地板除法支持
-
numpy.vectorize函数现在产生与基础函数相同的输出类 -
不再支持 Python 3.7
-
复数 dtype 的 str/repr 现在包含标点符号后的空格
-
在
PCG64DSXM和PCG64中修正了advance -
改变生成随机 32 位浮点变量的方式
-
-
C API 变更
-
掩码内部循环不再可以定制
-
对未来 DType 和 UFunc API 进行实验性暴露
-
-
新特性
-
NEP 49 配置分配器
-
实施 NEP 47(采用数组 API 标准)
-
从注释块生成 C/C++ API 参考文档现在可以实现
-
通过 mypy 插件分配特定于平台的
c_intp精度 -
增加 NEP 47 兼容的 dlpack 支持
-
numpy.argmin,numpy.argmax现已添加keepdims可选参数 -
bit_count用于计算整数中 1 位的数量 -
ndim和axis属性已添加到numpy.AxisError -
对
windows/arm64目标的初步支持 -
增加对 LoongArch 的支持
-
添加了
.clang-format文件 -
is_integer现在可用于numpy.floating和numpy.integer -
Fortran 尺寸规范的符号解析器
-
ndarray,dtype和number现在可以在运行时进行下标化
-
-
改进
-
ctypeslib.load_library现在可以接受任何类似路径的对象 -
在
finfo中添加了smallest_normal和smallest_subnormal属性 -
numpy.linalg.qr接受堆叠矩阵作为输入 -
numpy.fromregex现在接受os.PathLike的实现 -
为
quantile和percentile添加新方法 -
nan<x>函数添加了缺少的参数 -
注释主要 Numpy 命名空间
-
使用 AVX-512 优化向量化 umath 模块
-
OpenBLAS v0.3.18
-
-
-
1.21.6
-
1.21.5
-
贡献者
-
合并的拉取请求
-
-
1.21.4
-
贡献者
-
合并的拉取请求
-
-
1.21.3
-
贡献者
-
合并的拉取请求
-
-
1.21.2
-
贡献者
-
合并的拉取请求
-
-
1.21.1
-
贡献者
-
合并的拉取请求
-
-
1.21.0
-
新功能
- 添加
PCG64DXSMBitGenerator
- 添加
-
已过时的弃用内容
-
弃用内容
-
.dtype属性必须返回dtype -
numpy.convolve和numpy.correlate的不精确匹配已被弃用 -
np.typeDict已正式弃用 -
在创建类似数组时将引发异常
-
四个
ndarray.ctypes方法已被弃用
-
-
已过时的弃用内容
- 移除已弃用的
PolyBase和未使用的PolyError和PolyDomainError
- 移除已弃用的
-
兼容性说明
-
通用函数中错误类型的更改
-
__array_ufunc__参数验证 -
__array_ufunc__和附加的位置参数 -
在
Generator.uniform中验证输入值 -
默认包含路径中移除了
/usr/include路径 -
用于
dtype=...比较的更改 -
在 ufuncs 中
dtype和signature参数的更改 -
Ufunc
signature=...和dtype=的泛化和casting -
Distutils 强制在 clang 上使用严格的浮点模型
-
-
C API 更改
- 使用
ufunc->type_resolver和“type tuple”
- 使用
-
新功能
-
为处理特定平台的
numpy.number精度添加了一个 mypy 插件 -
让 mypy 插件管理扩展精度的
numpy.number子类 -
用于打印浮点值的新
min_digits参数 -
f2py 现在可以识别 Fortran 抽象接口块
-
BLAS 和 LAPACK 配置通过环境变量
-
ndarray添加了一个可以在运行时使用的别名
-
-
改进
-
numpy.unwrap的任意period选项 -
np.unique现在返回单个NaN -
改进了
Generator.rayleigh和Generator.geometric的性能 -
改进了占位符注释
-
-
性能改进
-
改进了 NumPy 数组整数除法的性能
-
改进
np.save和np.load的性能,适用于小数组
-
-
变更
-
numpy.piecewise输出类现在与输入类匹配 -
启用加速框架
-
-
-
1.20.3
-
贡献者
-
合并的拉取请求
-
-
1.20.2
-
贡献者
-
合并的拉取请求
-
-
1.20.1
-
亮点
-
贡献者
-
合并的拉取请求
-
-
1.20.0
-
新功能
-
random.Generator 类有一个新的
permuted函数 -
sliding_window_view为 numpy 数组提供了滑动窗口视图 -
numpy.broadcast_shapes是一个新的面向用户的函数
-
-
弃用内容
-
使用
np.int等内置类型的别名已被弃用 -
向具有非可选形状参数的函数传递
shape=None已被弃用 -
即使索引结果为空,也将报告索引错误
-
mode和searchside的不精确匹配已被弃用 -
对* numpy.dual*的弃用
-
outer和ufunc.outer用于矩阵的已弃用 -
进一步弃用数字样式类型
-
ndindex的ndincr方法已被弃用 -
未定义
__len__和__getitem__的 ArrayLike 对象
-
-
未来变更
- 无法使用子数组数据类型的数组
-
过期的弃用功能
- 已移除金融函数
-
兼容性注释
-
使用
isinstance(dtype, np.dtype)而不是type(dtype) is not np.dtype -
在
axis=None的情况下,连接中的相同类型强制转换 -
当分配给数组时,NumPy 标量将被强制转换
-
混合字符串和其他类型时,数组强制转换发生变化
-
数组强制转换重组
-
对
numpy.broadcast_arrays的结果进行写操作将导出只读缓冲区 -
类型字典中已删除了数字样式类型名称
-
operator.concat函数现在对数组参数引发 TypeError -
从 ABCPolyBase 中删除了
nickname属性 -
float->timedelta和uint64->timedelta的提升将引发 TypeError -
现在,
numpy.genfromtxt正确地解包结构化数组 -
mgrid、r_等在非默认精度输入下一致返回正确的输出 -
具有不匹配形状的布尔数组索引现在会正确地给出
IndexError -
转换错误中断迭代
-
f2py 生成的代码可能返回 Unicode 而不是字节字符串
-
__array_interface__["data"]元组的第一个元素必须是整数 -
poly1d尊重所有零参数的 dtype -
swig 的 numpy.i 文件仅适用于 Python 3。
-
在
np.array中发现虚类型
-
-
C API 更改
-
修改了
PyArray_DescrCheck宏 -
np.ndarray和np.void_的大小已更改
-
-
新功能
-
numpy.all和numpy.any函数的where关键字参数 -
numpy函数mean、std、var的where关键字参数 -
numpy.fft函数的norm=backward、forward关键字选项 -
NumPy 现在是有类型的
-
numpy.typing在运行时可访问 -
f2py 生成模块的新
__f2py_numpy_version__属性。 -
可通过 runtests.py 运行
mypy测试 -
对用户定义的 BLAS/LAPACK 检测顺序的否定。
-
允许将优化参数传递给 asv 构建
-
现在支持 NVIDIA HPC SDK nvfortran 编译器
-
cov和corrcoef的dtype选项
-
-
改进
-
多项式的更改的字符串表示(
__str__) -
删除加速库作为候选 LAPACK 库
-
包含多行对象的对象数组具有更易读的
repr -
Concatenate 支持提供输出 dtype
-
线程安全的 f2py 回调函数
-
numpy.core.records.fromfile现在支持类文件对象 -
在 AIX 上添加了 distutils 的 RPATH 支持
-
使用命令行参数指定的 f90 编译器
-
为 Cython 3.0 及更高版本添加 NumPy 声明
-
使窗口函数完全对称
-
-
性能改进和变更
- 启用多平台 SIMD 编译优化
-
变更
-
divmod(1., 0.)及相关函数行为变更 -
np.linspace在整数上现在使用向下取整
-
-
-
1.19.5
-
贡献者
-
合并的拉取请求
-
-
1.19.4
-
贡献者
-
合并的拉取请求
-
-
1.19.3
-
贡献者
-
合并的拉取请求
-
-
1.19.2
-
改进
- 为 Cython 3.0 及更高版本添加 NumPy 声明
-
贡献者
-
合并的拉取请求
-
-
1.19.1
-
贡献者
-
合并的拉取请求
-
-
1.19.0
-
亮点
-
已过时的弃用项
-
numpy.insert和numpy.delete现在不能在 0 维数组上传递轴 -
numpy.delete不再忽略越界索引 -
numpy.insert和numpy.delete不再接受非整数索引 -
numpy.delete不再将布尔索引转换为整数
-
-
兼容性说明
-
从
numpy.random.Generator.dirichlet改变随机变量流 -
PyArray_ConvertToCommonType中的标量提升 -
已弃用 Fasttake 和 fastputmask slots,并置为 NULL
-
np.ediff1d在to_end和to_begin参数下的类型转换行为 -
将空数组类对象转换为 NumPy 数组
-
移除
multiarray.int_asbuffer -
numpy.distutils.compat已被移除 -
issubdtype不再将float解释为np.floating -
将标量的
round输出结果与 Python 保持一致 -
numpy.ndarray构造函数不再将strides=()解释为strides=None -
C 语言级别的字符串到日期时间的转换已更改
-
使用小种子的
SeedSequence不再与生成冲突
-
-
弃用
-
弃用对不规则输入自动使用
dtype=object -
在
numpy.rec的工厂函数中传递shape=0已被弃用 -
弃用可能未使用的 C-API 函数
-
转换特定类型为 dtype 已弃用
-
np.complexfloating标量的round方法已被弃用 -
numpy.ndarray.tostring()已被弃用,建议使用tobytes()
-
-
C API 变更
-
API 函数中对
const维度的更好支持 -
为 UFunc 内部循环添加 const 修饰符
-
-
新功能
-
numpy.frompyfunc现在接受一个 identity 参数 -
np.str_标量现在支持缓冲区协议 -
numpy.copy的subok选项 -
numpy.linalg.multi_dot现在接受一个out参数 -
numpy.count_nonzero的keepdims参数 -
numpy.array_equal的equal_nan参数
-
-
改进
-
改进 CPU 特性的检测
-
在 64 位平台上使用 64 位整数大小作为后备 lapack_lite 中的默认值](release/1.19.0-notes.html#use-64-bit-integer-size-on-64-bit-platforms-in-fallback-lapack-lite)
-
当输入为
np.float64时,使用 AVX512 内部实现np.exp -
禁用 madvise hugepages 的能力
-
numpy.einsum在下标列表中接受 NumPyint64类型 -
np.logaddexp2.identity被改为-inf
-
-
变化
-
移除对
__array__的额外参数处理 -
numpy.random._bit_generator移动到numpy.random.bit_generator -
通过
pxd文件提供对随机分布的 Cython 访问 -
修复了
numpy.random.multivariate_normal中的eigh和cholesky方法 -
修复了
MT19937.jumped中的跳转实现
-
-
-
1.18.5
-
贡献者
-
已合并的拉取请求
-
-
1.18.4
-
贡献者
-
已合并的拉取请求
-
-
1.18.3
-
亮点
-
贡献者
-
已合并的拉取请求
-
-
1.18.2
-
贡献者
-
已合并的拉取请求
-
-
1.18.1
-
贡献者
-
已合并的拉取请求
-
-
1.18.0
-
亮点
-
新功能
- 在
numpy.random中添加多变量超几何分布
- 在
-
废弃功能
-
np.fromfile和np.fromstring将在错误数据上报错 -
在
ma.fill_value中废弃非标量数组作为填充值 -
废弃
PyArray_As1D、PyArray_As2D -
废弃
np.alen -
废弃金融函数
-
numpy.ma.mask_cols和numpy.ma.mask_row的axis参数已废弃
-
-
过时的废弃功能
-
兼容性说明
-
numpy.lib.recfunctions.drop_fields不再返回 None -
numpy.argmin/argmax/min/max在数组存在NaT的情况下返回NaT -
np.can_cast(np.uint64, np.timedelta64, casting='safe')现在为False -
从
numpy.random.Generator.integers更改随机变量流 -
为
datetime64、timedelta64添加更多的 ufunc 循环 -
numpy.random中的模块已移动
-
-
C API 变更
PyDataType_ISUNSIZED(descr)现在对结构数据类型返回 False
-
新增功能
-
添加我们自己的
*.pxdcython 导入文件 -
现在可以输入轴元组至
expand_dims -
支持 64 位 OpenBLAS
-
向 F2PY 添加
--f2cmap选项
-
-
改进
-
相同大小的不同 C 数值类型具有唯一名称
-
argwhere现在对 0d 数组产生一致的结果 -
为
random.permutation和random.shuffle添加axis参数 -
np.random.multivariate_normal的method关键字参数 -
为
numpy.fromstring添加复数支持 -
当
axis不为None时,numpy.unique具有一致的轴顺序 -
numpy.matmul的布尔输出现在转换为布尔值 -
当范围为
2**32时,numpy.random.randint产生了不正确的值](release/1.18.0-notes.html#numpy-random-randint-produced-incorrect-value-when-the-range-was-2-32) -
为
numpy.fromfile添加复数支持 -
如果编译器命名为
gcc,则添加std=c99(release/1.18.0-notes.html#std-c99-added-if-compiler-is-named-gcc)
-
-
更改
-
NaT现在在数组的末尾排序 -
np.set_printoptions中的不正确threshold引发TypeError或ValueError -
在保存带有元数据的 dtype 时发出警告
-
numpy.distutils对 LDFLAGS 和类似的值进行了更改](release/1.18.0-notes.html#numpy-distutils-append-behavior-changed-for-ldflags-and-similar) -
不经过弃用即删除
numpy.random.entropy -
添加选项以安静地构建配置并使用
-Werror构建
-
-
-
1.17.5
-
贡献者
-
已合并的拉取请求
-
-
1.17.4
-
亮点
-
贡献者
-
已合并的拉取请求
-
-
1.17.3
-
亮点
-
兼容性说明
-
贡献者
-
已合并的拉取请求
-
-
1.17.2
-
贡献者
-
已合并的拉取请求
-
-
1.17.1](release/1.17.1-notes.html)
-
贡献者](release/1.17.1-notes.html#contributors)
-
合并的拉取请求](release/1.17.1-notes.html#pull-requests-merged)
-
-
1.17.0](release/1.17.0-notes.html)
-
亮点](release/1.17.0-notes.html#highlights)
-
新函数](release/1.17.0-notes.html#new-functions)
-
弃用](release/1.17.0-notes.html#deprecations)
-
在
numpy.polynomial函数中传递float时将发出警告](release/1.17.0-notes.html#numpy-polynomial-functions-warn-when-passed-float-in-place-of-int) -
弃用
numpy.distutils.exec_command和temp_file_name](release/1.17.0-notes.html#deprecate-numpy-distutils-exec-command-and-temp-file-name) -
包装的 C-API 数组的可写标志](release/1.17.0-notes.html#writeable-flag-of-c-api-wrapped-arrays)
-
不再允许在 0d 数组上调用
numpy.nonzero](release/1.17.0-notes.html#numpy-nonzero-should-no-longer-be-called-on-0d-arrays) -
写入
numpy.broadcast_arrays的结果将发出警告](release/1.17.0-notes.html#writing-to-the-result-of-numpy-broadcast-arrays-will-warn)
-
-
未来变更](release/1.17.0-notes.html#future-changes)
- 未来版本中,dtype 中的 shape-1 字段将不会被折叠为标量](release/1.17.0-notes.html#shape-1-fields-in-dtypes-won-t-be-collapsed-to-scalars-in-a-future-version)
-
兼容性说明](release/1.17.0-notes.html#compatibility-notes)
-
float16亚正常值舍入](release/1.17.0-notes.html#float16-subnormal-rounding) -
使用 divmod 时的有符号零(Signed zero)现已解决](release/1.17.0-notes.html#signed-zero-when-using-divmod)
-
MaskedArray.mask现在返回掩码的视图,而不是掩码本身 -
不要在
numpy.frombuffer中查找__buffer__属性](release/1.17.0-notes.html#do-not-lookup-buffer-attribute-in-numpy-frombuffer) -
在
take,choose,put中覆盖缓冲区会发出警告](release/1.17.0-notes.html#out-is-buffered-for-memory-overlaps-in-take-choose-put) -
在加载时进行反向拆包需要明确的选择](release/1.17.0-notes.html#unpickling-while-loading-requires-explicit-opt-in)
-
旧的随机模块中,可能会对随机流进行潜在变更](release/1.17.0-notes.html#potential-changes-to-the-random-stream-in-old-random-module)
-
i0现在总是返回与输入相同形状的结果](release/1.17.0-notes.html#i0-now-always-returns-a-result-with-the-same-shape-as-the-input) -
can_cast不再假定所有的不安全转换都被允许](release/1.17.0-notes.html#can-cast-no-longer-assumes-all-unsafe-casting-is-allowed) -
ndarray.flags.writeable的标志位现在更频繁地被切换为真](release/1.17.0-notes.html#ndarray-flags-writeable-can-be-switched-to-true-slightly-more-often)
-
-
C API 变更](release/1.17.0-notes.html#c-api-changes)
npy_intp const*现在会传递维度或步幅输入参数](release/1.17.0-notes.html#dimension-or-stride-input-arguments-are-now-passed-by-npy-intp-const)
-
新特性
-
新的可扩展的
numpy.random模块,带有可选择的随机数生成器 -
libFLAME
-
用户自定义 BLAS 检测顺序
-
用户自定义 LAPACK 检测顺序
-
ufunc.reduce及相关函数现在接受一个where掩码 -
Timsort 和基数排序已取代 mergesort 用于稳定排序
-
packbits和unpackbits接受一个order关键字 -
unpackbits现在接受一个count参数 -
linalg.svd和linalg.pinv在厄米矩阵输入上可能更快 -
divmod 操作现在支持两个
timedelta64操作数 -
fromfile现在带有一个offset参数 -
pad的新模式“empty” -
empty_like及相关函数现在接受一个shape参数 -
浮点数标量实现
as_integer_ratio以匹配内置浮点数 -
结构化
dtype对象可以使用多个字段名称进行索引 -
.npy文件支持 Unicode 字段名称
-
-
改进
-
数组比较断言包括最大差异
-
用 pocketfft 库替换基于 fftpack 的
fft模块 -
在
numpy.ctypeslib中对ctypes支持进一步改进 -
numpy.errstate现在也是一个函数装饰器 -
numpy.exp和numpy.log在 float32 实现中提速 -
提高
numpy.pad性能 -
numpy.interp更稳定地处理无限值 -
fromfile,tofile和ndarray.dump的Pathlib支持 -
为 bool 和 int 类型提供了专门的
isnan,isinf和isfiniteufuncs -
isfinite支持datetime64和timedelta64类型 -
对
nan_to_num添加了新的关键字 -
由于分配过大的数组引起的
MemoryErrors现在更具描述性 -
floor,ceil和trunc现在尊重内置魔术方法 -
quantile现在适用于fraction.Fraction和decimal.Decimal对象 -
在
matmul中支持对象数组
-
-
变更
-
median和percentile函数族不再对nan发出警告 -
timedelta64 % 0的行为调整为返回NaT -
NumPy 函数现在始终支持
__array_function__覆盖 -
lib.recfunctions.structured_to_unstructured不会消除单字段视图。 -
clip现在在底层使用 ufunc -
__array_interface__偏移现在按文档所述工作 -
force zip64标志中savez的pickle协议设置为3 -
用不存在的字段索引的结构化数组引发
KeyError而不是ValueError。
-
-
-
1.16.6
-
亮点
-
新函数
- 允许使用
matmul (*@* operator)与对象数组一起使用。
- 允许使用
-
兼容性说明
- 修复布尔类型在矩阵乘法(@ 操作符)中的回归问题
-
改进
- 数组比较断言包括最大差异
-
贡献者
-
合并的拉取请求
-
-
1.16.5
-
贡献者
-
合并的拉取请求
-
-
1.16.4
-
新的废弃功能
- C-API 封装数组的可写标志
-
兼容性说明
- 随机流的潜在更改
-
更改
numpy.lib.recfunctions.structured_to_unstructured不会压缩单字段视图
-
贡献者
-
合并的拉取请求
-
-
1.16.3
-
兼容性说明
- 加载时解除封存需要显式选择
-
改进
- 将random.mvnormal中的协方差转换为双精度
-
更改
__array_interface__offset 现在按照文档工作
-
-
1.16.2
-
兼容性说明
- 使用 divmod 时的有符号零
-
贡献者
-
合并的拉取请求
-
-
1.16.1
-
贡献者
-
增强功能
-
兼容性说明
-
新功能
- 现在支持两个
timedelta64操作数的divmod操作
- 现在支持两个
-
改进
-
进一步改进
np.ctypeslib中的ctypes支持 -
数组比较断言包括最大差异
-
-
改动
timedelta64 % 0的行为已经调整为返回NaT
-
-
1.16.0 版本
-
亮点
-
新的函数
-
新的被废弃特性
-
已过期的被废弃特性
-
未来的改变
-
兼容性注意事项
-
在 Windows 上的 f2py 脚本
-
NaT 的比较
-
complex64/128 的对齐方式已更改
-
nd_grid 中 len 方法已移除
-
np.unravel_index现在接受shape关键字参数 -
多字段视图返回视图而不是副本
-
-
C API 改动
-
新增功能
-
向
histogram添加了积分平方误差(ISE)估计器 -
np.loadtxt现在新增max_rows关键字参数 -
np.timedelta64操作数现在支持取模运算符
-
-
改进
-
numpy 数组的无副本 pickling
-
构建 shell 独立性
-
np.polynomial.Polynomial 类在 Jupyter 笔记本中以 LaTeX 形式呈现
-
randint和choice现在可以用于空分布 -
linalg.lstsq,linalg.qr, 和linalg.svd现在可以使用空数组进行计算 -
链异常以提供更好的错误消息对无效的 PEP3118 格式字符串进行异常处理
-
Einsum 优化路径更新和效率改进
-
numpy.angle和numpy.expand_dims现在适用于ndarray子类 -
NPY_NO_DEPRECATED_API编译器警告抑制 -
np.diff添加了 kwargsprepend和append -
ARM 支持已更新
-
附加到构建标志
-
广义 ufunc 签名现在允许固定大小的维度
-
广义 ufunc 签名现在允许灵活维度
-
np.clip和clip方法检查内存重叠 -
np.polyfit中选项cov的新值unscaled -
标量数值类型的详细文档字符串
-
__module__属性现在指向公共模块 -
大内存分配标记为适用于透明巨大页
-
Alpine Linux(和其他 musl c 库发行版)支持
-
加速
np.block用于大数组 -
为只读数组加速
np.take -
更多函数支持类似路径的对象
-
在归约过程中 ufunc 身份的更好行为
-
从 ctypes 对象改进的转换
-
一个新的
ndpointer.contents成员 -
matmul现在是一个ufunc -
linspace,logspace和geomspace的起始和停止数组 -
CI 扩展了其他服务
-
-
变更
-
比较 ufuncs 现在将引发错误,而不是返回未实现
-
对于非数值数组,
positive现在将引发弃用警告 -
NDArrayOperatorsMixin现在实现了矩阵乘法 -
np.polyfit中方差矩阵的缩放方式已更改 -
maximum和minimum不再发出警告 -
Umath 和 multiarray c-extension 模块合并为单一模块
-
getfield有效性检查扩展 -
NumPy 函数现在支持
__array_function__重载 -
基于只读缓冲区的数组不可设置
writeable
-
-
-
1.15.4
-
兼容性说明
-
贡献者
-
合并的 Pull 请求
-
-
1.15.3
-
兼容性说明
-
贡献者
-
合并的 Pull 请求
-
-
1.15.2
-
兼容性说明
-
贡献者
-
合并的 Pull 请求
-
-
1.15.1
-
兼容性说明
-
贡献者
-
合并的 Pull 请求
-
-
1.15.0
-
亮点
-
新增函数
-
弃用项
-
未来变更
-
兼容性说明
-
编译的测试模块改名并私有化
-
np.savez返回的NpzFile现在是collections.abc.Mapping -
在特定条件下,必须在上下文管理器中使用
nditer -
Numpy 已切换到使用 pytest 而不是 nose 进行测试(release/1.15.0-notes.html#numpy-has-switched-to-using-pytest-instead-of-nose-for-testing)
-
Numpy 不再使用
__array_interface__对ctypes进行修改(release/1.15.0-notes.html#numpy-no-longer-monkey-patches-ctypes-with-array-interface) -
np.ma.notmasked_contiguous和np.ma.flatnotmasked_contiguous总是返回列表(release/1.15.0-notes.html#np-ma-notmasked-contiguous-and-np-ma-flatnotmasked-contiguous-always-return-lists) -
np.squeeze恢复了不能处理axis参数的对象的旧行为(release/1.15.0-notes.html#np-squeeze-restores-old-behavior-of-objects-that-cannot-handle-an-axis-argument) -
无结构空数组的
.item方法现在返回一个字节对象(release/1.15.0-notes.html#unstructured-void-array-s-item-method-now-returns-a-bytes-object) -
copy.copy和copy.deepcopy不再将masked转换为数组(release/1.15.0-notes.html#copy-copy-and-copy-deepcopy-no-longer-turn-masked-into-an-array) -
结构化数组的多字段索引仍将返回一个副本(release/1.15.0-notes.html#multifield-indexing-of-structured-arrays-will-still-return-a-copy)
-
-
C API 更改(release/1.15.0-notes.html#c-api-changes)
-
新函数
npy_get_floatstatus_barrier和npy_clear_floatstatus_barrier(release/1.15.0-notes.html#new-functions-npy-get-floatstatus-barrier-and-npy-clear-floatstatus-barrier) -
对
PyArray_GetDTypeTransferFunction的更改(release/1.15.0-notes.html#changes-to-pyarray-getdtypetransferfunction)
-
-
新功能(release/1.15.0-notes.html#new-features)
-
np.gcd和np.lcmufuncs 已添加整数和对象类型 -
支持 iOS 跨平台构建(release/1.15.0-notes.html#support-for-cross-platform-builds-for-ios)
-
np.intersect1d添加了return_indices关键字(release/1.15.0-notes.html#return-indices-keyword-added-for-np-intersect1d) -
np.quantile和np.nanquantile(release/1.15.0-notes.html#np-quantile-and-np-nanquantile) -
构建系统
-
-
改进
-
np.einsum的更新(release/1.15.0-notes.html#np-einsum-updates) -
np.ufunc.reduce和相关函数现在接受初始值 -
np.flip可以在多个轴上操作(release/1.15.0-notes.html#np-flip-can-operate-over-multiple-axes) -
histogram和histogramdd函数已移动到np.lib.histograms(release/1.15.0-notes.html#histogram-and-histogramdd-functions-have-moved-to-np-lib-histograms) -
当给定明确的区间时,
histogram将接受 NaN 值(release/1.15.0-notes.html#histogram-will-accept-nan-values-when-explicit-bins-are-given) -
histogram在给定明确的 bin 边界的情况下适用于日期时间类型 -
histogram“auto” 估计器更好地处理有限的方差 -
histogram 和
histogramdd返回的边界现在与数据浮点类型匹配 -
histogramdd允许在一部分轴上给出明确的范围 -
histogramdd和histogram2d的 normed 参数已更名 -
np.r_在 0d 数组上可用,而np.ma.mr_在np.ma.masked上可用 -
np.ptp接受keepdims参数和扩展的轴元组 -
MaskedArray.astype现在与ndarray.astype相同 -
在编译时启用 AVX2/AVX512
-
nan_to_num在接收标量或 0d 输入时总是返回标量 -
np.flatnonzero在可转换为 numpy 类型上起作用 -
np.interp返回 numpy 标量而不是内置标量 -
允许在 Python 2 中将 dtype 字段名称设置为 Unicode
-
比较的 ufunc 可以接受
dtype=object,覆盖默认的bool -
sort函数接受kind='stable' -
不为原位累积做临时复制
-
linalg.matrix_power现在可以处理矩阵堆栈 -
对于多维数组,
random.permutation的性能提高 -
广义的 ufuncs 现在接受
axes、axis和keepdims参数 -
float128值现在在 ppc 系统上正确打印出来](release/1.15.0-notes.html#float128-values-now-print-correctly-on-ppc-systems) -
新的
np.take_along_axis和np.put_along_axis函数
-
-
-
1.14.6
-
贡献者
-
合并的拉取请求
-
-
1.14.5
-
贡献者
-
合并的拉取请求
-
-
1.14.4
-
贡献者
-
合并的拉取请求
-
-
1.14.3
-
贡献者
-
合并的拉取请求
-
-
1.14.2
-
贡献者
-
合并的拉取请求
-
-
1.14.1
-
贡献者
-
合并的拉取请求
-
-
1.14.0
-
亮点
-
新函数
-
弃用
-
未来的变化
-
兼容性说明
-
视图的屏蔽数组的掩码也是视图,而不是副本](release/1.14.0-notes.html#the-mask-of-a-masked-array-view-is-also-a-view-rather-than-a-copy)
-
np.ma.masked不再可写 -
np.ma函数产生的fill_value发生了变化 -
a.flat.__array__()当a非连续时返回不可写数组 -
np.tensordot现在在收缩零长度维度时返回零数组 -
numpy.testing重新组织 -
np.asfarray不再通过dtype参数接受非数据类型 -
1D
np.linalg.norm保留浮点输入类型,甚至对于任意阶数 -
count_nonzero(arr, axis=())现在计算没有轴,而不是所有轴 -
test目录添加了__init__.py文件 -
在非结构化 void 数组上进行
.astype(bool)现在对每个元素调用bool -
MaskedArray.squeeze永远不会返回np.ma.masked -
can_cast的第一个参数由from重命名为from_ -
isnat当传入错误类型时引发TypeError -
dtype.__getitem__当传入错误类型时引发TypeError -
用户定义的类型现在需要实现
__str__和__repr__ -
许多对数组打印的更改,可通过新的“legacy”打印模式禁用
-
-
C API 更改
- PyPy 兼容的
UPDATEIFCOPY数组替代方案
- PyPy 兼容的
-
新功能
-
文本 IO 函数的编码参数
-
外部
nose插件可被numpy.testing.Tester使用 -
parametrize装饰器添加到numpy.testing -
chebinterpolate函数添加到numpy.polynomial.chebyshev -
支持在 Python 3 中读取 lzma 压缩的文本文件
-
sign选项添加到np.setprintoptions和np.array2string -
hermitian选项添加到np.linalg.matrix_rank -
threshold和edgeitems选项添加到np.array2string -
concatenate和stack增加了一个out参数 -
支持在 Windows 上使用 PGI flang 编译器
-
-
改进
-
random.noncentral_f中的分子自由度只需为正值 -
所有
np.einsum变体释放了 GIL -
np.einsum 函数将在可能时使用 BLAS 并默认优化
-
f2py现在处理零维数组 -
numpy.distutils现在支持同时使用 MSVC 和 mingw64-gfortran -
np.linalg.pinv现在适用于堆叠矩阵 -
numpy.save将数据对齐到 64 字节而不是 16 -
NPZ 文件现在可以在不使用临时文件的情况下编写
-
更好地支持空结构化和字符串类型
-
np.lib.financial中支持decimal.Decimal -
浮点打印现在使用 “dragon4” 算法以获取最短十进制表示
-
void类型的元素现在以十六进制表示](release/1.14.0-notes.html#void-datatype-elements-are-now-printed-in-hex-notation) -
void数据类型的打印样式现在可以独立自定义 -
np.loadtxt的内存使用量减少
-
-
变更
-
结构化数组的多字段索引/赋值
-
整数和 Void 标量现在不受
np.set_string_function影响 -
0 维数组打印已更改,
array2string的style参数已弃用 -
使用数组种子
RandomState需要一个一维数组 -
MaskedArray对象显示更有用的repr -
np.polynomial类的repr更加明确
-
-
-
1.13.3
-
贡献者
-
已合并的拉取请求
-
-
1.13.2
-
贡献者
-
合并的拉取请求
-
-
1.13.1
-
合并的拉取请求
-
贡献者
-
-
1.13.0
-
亮点
-
新函数
-
废弃
-
未来变更
-
构建系统更改
-
兼容性说明
-
错误类型变更
-
Tuple 对象数据类型
-
DeprecationWarning 转为错误
-
未来警告变更行为
-
数据类型现在始终为真
-
在
ndarray子类中不再需要__getslice__和__setslice__ -
使用
...(省略号)索引 MaskedArrays/常量现在返回 MaskedArray
-
-
C API 更改
-
在空数组上的 GUfuncs 和 NpyIter 轴移除
-
PyArray_MapIterArrayCopyIfOverlap添加到 NumPy C-API
-
-
新特性
-
添加
__array_ufunc__ -
新的
positive通用函数 -
新的
divmod通用函数 -
np.isnat通用函数测试 NaT 特殊的日期时间和时间间隔值 -
np.heaviside通用函数计算 Heaviside 函数 -
使用
np.block函数创建块数组 -
isin函数,对in1d进行改进 -
临时删节
-
unique的axes参数 -
np.gradient现在支持非均匀间隔的数据 -
在
apply_along_axis中支持返回任意维度的数组 -
dtype添加.ndim属性以补充.shape的属性.ndim(维数).shape -
Python 3.6 中的 tracemalloc 支持
-
NumPy 可以使用宽松步幅检查调试构建
-
-
改进
-
重叠输入的 ufunc 行为
-
在 MinGW 中部分支持 64 位 f2py 扩展
-
对
packbits和unpackbits进行了性能改进 -
修复了 PPC 长双精度浮点信息问题
-
ndarray子类的更好默认 repr -
更可靠的掩蔽数组比较
-
具有布尔元素的 np.matrix 现在可以使用字符串语法创建
-
更多
linalg操作现在接受空向量和矩阵 -
捆绑版本的 LAPACK 现在是 3.2.2
-
np.hypot.reduce和np.logical_xor的reduce在更多情况下允许 -
对象数组的更好
repr
-
-
变更
-
对掩蔽数组进行排序的
argsort使用与sort相同的默认参数 -
average现在保留子类 -
array == None和array != None进行逐元素比较 -
np.equal, np.not_equal对对象数组忽略对象身份 -
布尔索引的更改
-
np.random.multivariate_normal处理糟糕协方差矩阵的行为 -
assert_array_less现在比较np.inf和-np.inf -
assert_array_和屏蔽数组的assert_equal会隐藏更少的警告 -
memmap对象中的offset属性值 -
np.real和np.imag对于标量输入返回标量 -
多项式方便类不能传递给 ufuncs
-
ufunc 的输出参数也可以是元组,对于 ufunc 方法也是如此
-
-
-
1.12.1
- 修复的错误
-
1.12.0
-
亮点
-
不再支持
-
添加的支持
-
构���系统的变化
-
不推荐使用
-
ndarray 对象的
data属性的赋值 -
linspace中 num 属性的 int 强制转换不安全 -
binary_repr的位宽参数不足
-
-
未来的变化
- 对结构化数组的多字段操作
-
兼容性说明
-
DeprecationWarning 的行为变为错误
-
FutureWarning 的行为变化
-
power和**对于整数的负指数会引发错误 -
默认情况下放宽了步幅检查
-
np.percentile的 "midpoint" 插值方法修复了精确索引的问题 -
keepdims关键字参数传递给用户类方法 -
bitwise_and的身份变化 -
当未屏蔽的无效值出现时,ma.median 会发出警告并返回 nan
-
assert_almost_equal更加一致 -
测试期间警告的
NoseTester行为](release/1.12.0-notes.html#nosetester-behaviour-of-warnings-during-testing) -
assert_warns和deprecated修饰符更具体](release/1.12.0-notes.html#assert-warns-and-deprecated-decorator-more-specific) -
C API
-
-
新特性
-
可写关键字参数
as_strided -
rot90的axes关键字参数](release/1.12.0-notes.html#axes-keyword-argument-for-rot90) -
广义
flip -
numpy.distutils中的 BLIS 支持](release/1.12.0-notes.html#blis-support-in-numpy-distutils) -
在
numpy/__init__.py中运行特定于分发的检查的钩子](release/1.12.0-notes.html#hook-in-numpy-init-py-to-run-distribution-specific-checks) -
新的
nancumsum和nancumprod函数](release/1.12.0-notes.html#new-nanfunctions-nancumsum-and-nancumprod-added) -
np.interp现在可以插值复数值 -
新增多项式求值函数
polyvalfromroots](release/1.12.0-notes.html#new-polynomial-evaluation-function-polyvalfromroots-added) -
新增数组创建函数
geomspace](release/1.12.0-notes.html#new-array-creation-function-geomspace-added) -
测试警告的新上下文管理器](release/1.12.0-notes.html#new-context-manager-for-testing-warnings)
-
新增掩蔽数组函数
ma.convolve和ma.correlate](release/1.12.0-notes.html#new-masked-array-functions-ma-convolve-and-ma-correlate-added) -
新的
float_powerufunc](release/1.12.0-notes.html#new-float-power-ufunc) -
np.loadtxt现在支持单个整数作为usecol参数](release/1.12.0-notes.html#np-loadtxt-now-supports-a-single-integer-as-usecol-argument) -
histogram的改进自动化 bin 估计器](release/1.12.0-notes.html#improved-automated-bin-estimators-for-histogram) -
np.roll现在可以同时滚动多个轴 -
ndarrays实现的__complex__方法](release/1.12.0-notes.html#the-complex-method-has-been-implemented-for-the-ndarrays) -
pathlib.Path对象现在支持 -
np.finfo新增bits属性 -
np.vectorize新增signature参数 -
对整数数组除法的 py3k 警告发出](release/1.12.0-notes.html#emit-py3kwarnings-for-division-of-integer-arrays)
-
numpy.sctypes现在也包括 Python3 中的 bytes](release/1.12.0-notes.html#numpy-sctypes-now-includes-bytes-on-python3-too)
-
-
改进
-
bitwise_and的标识已更改](release/1.12.0-notes.html#id1) -
广义通用函数现在将解锁 GIL
-
np.fft 中的缓存现在总大小和项目数受限
-
改进了对零宽度字符串/unicode 数据类型的处理
-
用 AVX2 向量化的整数通用函数
-
np.einsum中的操作顺序优化 -
快速排序已更改为内省排序
-
ediff1d改进了性能和子类处理 -
float16 数组的
ndarray.mean的精度改进
-
-
更改
-
所有类似数组的方法现在在 fromnumeric.py 中使用关键字参数调用
-
大多数情况下,np.memmap 对象的操作返回 numpy 数组
-
警告的 stacklevel 增加了
-
-
-
1.11.3
-
对 maintenance/1.11.3 的贡献者
-
已合并的拉取请求
-
-
1.11.2
- 已合并的拉取请求
-
1.11.1
- 已合并的修复
-
1.11.0
-
亮点
-
构建系统更改
-
未来变化
-
兼容性注意事项
-
datetime64 改变
-
linalg.norm返回类型更改 -
多项式拟合更改
-
np.dot 现在引发
TypeError而不是ValueError -
FutureWarning 更改行为
-
%和//运算符 -
C API
-
旧式类的对象数据类型检测
-
-
新特性
-
改进
-
np.gradient现在支持axis参数 -
np.lexsort现在支持带有对象数据类型的数组 -
np.ma.core.MaskedArray现在支持order参数 -
对遮蔽数组进行的内存和速度改进
-
ndarray.tofile现在在 Linux 上使用 fallocate -
形式为
A.T @ A和A @ A.T的操作的优化 -
np.testing.assert_warns现在可以作为上下文管理器使用 -
对 np.random.shuffle 的速度改进
-
-
变化
-
numpy.distutils中已删除对 Pyrex 的支持 -
np.broadcast现在可以使用单个参数调用 -
np.trace现在尊重数组子类 -
np.dot现在引发TypeError,而不是ValueError -
linalg.norm返回类型更改
-
-
弃用项
-
以 Fortran 顺序的数组视图
-
用于数组顺序的无效参数](release/1.11.0-notes.html#invalid-arguments-for-array-ordering)
-
testing命名空间中的随机数生成器 -
在闭区间上生成随机整数
-
-
FutureWarnings
- 给
MaskedArray的切片/视图赋值
- 给
-
-
1.10.4
-
兼容性注意事项
-
已解决问题
-
合并的 PR
-
-
1.10.3
-
1.10.2
-
兼容性注意事项
-
放宽的步进检查不再是默认值
-
修复
numpy.i中的 swig bug -
弃用以 Fortran 顺序更改维度的视图
-
-
修复的问题
-
合并的 PR
-
注释
-
-
1.10.1
-
1.10.0
-
亮点
-
不再支持
-
未来的更改
-
兼容性说明
-
默认类型转换规则变化
-
numpy 版本字符串
-
宽松的步幅检查
-
除
axis=0之外的任何方向上的 1 维数组的连接会引发IndexError -
np.ravel、np.diagonal 和 np.diag 现在会保留子类型
-
rollaxis 和 swapaxes 总是返回一个视图
-
nonzero 现在返回基本的 ndarrays
-
C API
-
recarray 字段返回类型
-
recarray 视图
-
ufunc 的 ‘out’ 关键字参数现在接受数组的元组
-
byte 数组索引现在会引发 IndexError
-
包含带有数组的对象的掩码数组
-
当遇到无效值时,中位数会发出警告并返回 nan
-
从 numpy.ma.testutils 中可以使用的函数已经发生了改变
-
-
新功能
-
从 site.cfg 中读取额外标志
-
np.cbrt 用于计算实数浮点数的立方根
-
numpy.distutils 现在允许并行编译
-
genfromtxt 有一个新的
max_rows参数 -
用于调用数组广播的新函数 np.broadcast_to
-
用于测试警告的新上下文管理器 clear_and_catch_warnings
-
cov有新的
fweights和aweights参数 -
支持 Python 3.5+的‘@’操作符
-
fft 函数的新参数
norm
-
-
改进
-
np.digitize使用二分搜索
-
np.poly现在将整数输入转换为浮点数
-
np.interp现在可以与周期函数一起使用
-
np.pad支持
pad_width和constant_values的更多输入类型 -
np.argmax和np.argmin现在支持
out参数 -
检测并使用更多系统 C99 复杂函数](release/1.10.0-notes.html#more-system-c99-complex-functions-detected-and-used)
-
np.loadtxt支持由
float.hex方法产生的字符串 -
np.isclose现在正确处理整数数据类型的最小值
-
np.allclose在内部使用np.isclose。
-
np.genfromtxt现在正确处理大整数
-
np.load, np.save具有 pickle 向后兼容性标志
-
MaskedArray 支持更复杂的基类
-
-
变更
-
dotblas 功能已移至 multiarray
-
更严格地检查 gufunc 签名的一致性
-
np.einsum返回的视图可写入
-
np.argmin跳过 NaT 值
-
-
弃用项
-
涉及字符串或结构化数据类型的数组比较
-
SafeEval
-
alterdot, restoredot
-
pkgload, PackageLoader
-
corrcoef 的 bias, ddof 参数
-
dtype string representation changes
-
-
-
1.9.2
- Issues fixed
-
1.9.1
- Issues fixed
-
1.9.0
-
Highlights
-
Dropped Support
-
Future Changes
-
Compatibility notes
-
The diagonal and diag functions return readonly views.
-
Special scalar float values don’t cause upcast to double anymore
-
Percentile output changes
-
ndarray.tofile exception type
-
Invalid fill value exceptions
-
Polynomial Classes no longer derived from PolyBase
-
Using numpy.random.binomial may change the RNG state vs. numpy < 1.9
-
Random seed enforced to be a 32 bit unsigned integer
-
Argmin and argmax out argument
-
Einsum
-
Indexing
-
Non-integer reduction axis indexes are deprecated
-
promote_typesand string dtype -
can_castand string dtype -
astype and string dtype
-
npyio.recfromcsv keyword arguments change
-
The
doc/swigdirectory moved -
The
npy_3kcompat.hheader changed -
Negative indices in C-Api
sq_itemandsq_ass_itemsequence methods -
NDIter
-
zeros_likefor string dtypes now returns empty strings
-
-
New Features
-
Percentile supports more interpolation options
-
中位数和百分位数的广义轴支持
-
np.linspace和np.logspace添加了 dtype 参数 -
np.triu和np.tril广播更加通用 -
tobytes方法的别名为tostring -
构建系统
-
与 Python
numbers模块兼容性 -
np.vander添加了increasing参数 -
np.unique添加了unique_counts参数 -
nanfunctions 中对中位数和百分位数的支持
-
添加了 NumpyVersion 类
-
允许保存大量命名列的数组
-
np.cross支持全广播
-
-
改进
-
在某些情况下,求和具有更好的数值稳定性
-
百分位数在以
np.partition为基础的实现中实现 -
np.array性能提升 -
np.searchsorted性能提升 -
可选减少 np.distutils 的冗长度
-
np.random.multivariate_normal中的协方差检查 -
多项式类不再基于模板
-
更多 GIL 释放
-
支持对更复杂基类的 MaskedArray
-
C-API
-
-
已废弃项
-
重复序列的非整数标量
-
select输入项废弃 -
rank函数 -
对象数组的相等比较
-
C-API
-
-
-
1.8.2
- 已修复的问题
-
1.8.1
-
修复的问题
-
变化
-
NDIter
-
np.distutils 的可选减少冗余输出
-
-
弃用项
- C-API
-
-
1.8.0
-
亮点
-
不再支持的功能
-
未来的变化
-
兼容性注意事项
-
NPY_RELAXED_STRIDES_CHECKING
-
作为第二参数的非数组的二元操作
-
使用 overwrite_input 的 median 函数只部分排序数组
-
financial.npv 的修复
-
比较 NaN 数字时的运行时警告
-
-
新功能
-
堆叠数组上的线性代数支持
-
ufuncs 的原位 fancy 索引
-
新函数 partition 和 argpartition
-
新函数 nanmean、nanvar 和 nanstd
-
新函数 full 和 full_like
-
大文件的 IO 兼容性
-
与 OpenBLAS 的构建
-
新常量
-
qr 的新模式
-
in1d 的新 invert 参数
-
使用 np.newaxis 的高级索引
-
C-API
-
runtests.py
-
-
改进
-
IO 性能提升
-
对 pad 的性能改进
-
isnan、isinf、isfinite 和 byteswap 的性能改进
-
通过 SSE2 向量化的性能改进
-
median 的性能改进
-
可重载操作数标志的 ufunc C-API
-
-
变更
-
一般内容
-
C-API 数组��加
-
C-API Ufunc 添加
-
C-API 开发者改进
-
-
废弃功能
- 一般内容
-
作者
-
-
1.7.2
- 解决的问题
-
1.7.1
- 解决的问题
-
1.7.0
-
亮点
-
兼容性说明
-
新功能
-
Reduction UFuncs 广义 axis= 参数
-
Reduction UFuncs 新 keepdims= 参数
-
日期时间支持
-
用于打印数组的自定义格式化程序
-
新函数 numpy.random.choice
-
新函数 isclose
-
多项式包的初步多维支持
-
能够填充 n 维数组
-
searchsorted 的新参数
-
构建系统
-
C API
-
-
变更
-
一般内容
-
类型转换规则
-
-
废弃功能
-
一般内容
-
C-API
-
-
-
1.6.2
-
解决的问题
-
numpy.core -
numpy.lib -
numpy.distutils -
numpy.random
-
-
变更
-
numpy.f2py -
numpy.poly
-
-
-
1.6.1
- 解决的问题
-
1.6.0
-
亮点
-
新功能
-
新的 16 位浮点类型
-
新的迭代器
-
numpy.polynomial 中的 Legendre、Laguerre、Hermite、HermiteE 多项式
-
Fortran 中假定形状数组和
numpy.f2py中 size 函数的支持 -
其他新函数
-
-
变更
-
默认错误处理 -
numpy.distutils -
numpy.testing -
C API
-
-
已弃用的功能
-
移除的功能
-
numpy.fft -
numpy.memmap -
numpy.lib -
numpy.ma -
numpy.distutils
-
-
-
1.5.0
-
亮点
-
Python 3 兼容性
-
PEP 3118 兼容性
-
-
新功能
-
将复数转换为实数的警告
-
ndarrays 的 Dot 方法](release/1.5.0-notes.html#dot-method-for-ndarrays)
-
linalg.slogdet 函数
-
新的标头
-
-
变更
-
polynomial.polynomial
-
polynomial.chebyshev
-
直方图
-
correlate
-
-
-
1.4.0
-
亮点
-
新功能
-
ufuncs 的扩展数组包装机制
-
自动检测向前不兼容性
-
新的迭代器
-
新的多项式支持
-
新的 C API
-
新的 ufuncs
-
新的定义
-
测试
-
重用 npymath
-
改进的集合操作
-
-
改进
-
被弃用的功能
-
内部更改
-
在有可用时使用 C99 复杂功能
-
拆分多维数组和 umath 源代码
-
独立编译
-
独立核心数学库
-
-
-
1.3.0
-
亮点
-
Python 2.6 支持
-
广义 ufuncs
-
实验性 Windows 64 位支持
-
-
新功能
-
格式问题
-
max/min 中的 nan 处理
-
sign 中的 nan 处理
-
新的 ufuncs
-
掩码数组
-
Windows 上的 gfortran 支持
-
Windows 二进制文件的 arch 选项
-
-
已弃用功能
- 直方图
-
文档更改
-
新的 C API
-
多维数组 API
-
Ufunc API
-
新定义
-
便携式 NAN、INFINITY 等...
-
-
内部更改
-
numpy.core 数学配置翻新
-
umath 重构
-
构建警告的改进
-
独立核心数学库
-
CPU 架构检测
-
-
NumPy 1.26.0 发布说明
NumPy 1.26.0 发布是 1.25.x 发布周期的延续,增加了对 Python 3.12.0 的支持。Python 3.12 放弃了 distutils,因此支持它需要找到一个替代方案来替代 NumPy 使用的 setup.py/distutils 基于的构建系统。我们选择使用 Meson 构建系统,这是第一个支持它的 NumPy 版本。这也是第一个支持 Cython 3.0 的版本,同时保留了 0.29.X 的兼容性。支持这两个升级是一个大项目,在这个版本中有 100 多个文件被修改。更新日志没有完全记录工作的全部范围,特别感谢 Ralf Gommers、Sayed Adel、Stéfan van der Walt 和 Matti Picus 在主要开发分支中做了大部分工作。
本版本的亮点包括:
-
支持 Python 3.12.0。
-
Cython 3.0.0 兼容性。
-
使用 Meson 构建系统
-
更新的 SIMD 支持
-
f2py 修复,meson 和 bind(x)支持
-
支持更新的 Accelerate BLAS/LAPACK 库
本版本支持的 Python 版本为 3.9-3.12。
新功能
numpy.array_api中的 Array API v2022.12 支持
numpy.array_api现在完全支持数组 API 标准的v2022.12 版本。请注意,这还不包括标准中的可选fft扩展。
(gh-23789)
支持更新的 Accelerate BLAS/LAPACK 库
在 macOS 13.3 中添加了对更新的 Accelerate BLAS/LAPACK 库的支持,包括 ILP64(64 位整数)支持。这带来了 arm64 支持,并且对常用线性代数运算的性能提升高达 10 倍。在构建时选择 Accelerate 时,如果可用,将自动使用 13.3+版本。
(gh-24053)
f2py的meson后端
编译模式下的f2py(即f2py -c)现在接受--backend meson选项。这是 Python 3.12及以后版本的默认选项。旧版本仍将默认使用--backend distutils。
为了在实际用例中支持这一点,在编译模式下,f2py接受一个--dep标志,可以多次使用,这将映射到meson后端中的dependency()调用,并且在distutils后端中不起作用。
对于仅作为代码生成器使用f2py的用户,即没有-c选项的用户,没有任何更改。
(gh-24532)
为f2py添加了bind(c)支持
函数和子程序都可以用bind(c)进行注释。f2py将处理正确的类型映射,并保留其他C接口的唯一标签。
注意: bind(c, name = 'routine_name_other_than_fortran_routine') 不会被 f2py 绑定所遵守,因为 bind(c) 与 name 旨在保证 C 和 Fortran 中的相同名称,而不是在 Python 和 Fortran 中。
(gh-24555)
改进
f2py 对 iso_c_binding 的支持
以前,用户必须定义自己的自定义 f2cmap 文件才能使用 Fortran2003 的 iso_c_binding 内在模块定义的类型映射。现在,这些类型映射已经被 f2py 原生支持。
(gh-24555)
构建系统更改
在此版本中,NumPy 已经切换到 Meson 作为构建系统,meson-python 作为构建后端。安装 NumPy 或构建轮子可以使用标准工具如 pip 和 pypa/build。支持以下内容:
-
常规安装:
pip install numpy或(在克隆的仓库中)pip install . -
构建轮子:
python -m build(首选),或pip wheel . -
可编辑安装:
pip install -e . --no-build-isolation -
通过使用 spin 实现的自定义 CLI 进行开发构建:
spin build。
所有常规的 pip 和 pypa/build 标志(例如,--no-build-isolation)应该按预期工作。
NumPy 特定的构建自定义
许多 NumPy 特定的构建自定义方式已经改变。不再支持控制 BLAS/LAPACK、SIMD、线程等选项的 NPY_* 环境变量,也不再支持用于选择 BLAS 和 LAPACK 的 site.cfg 文件。相反,可以通过 pip/build 的配置设置接口传递命令行标志给构建。这些标志都列在仓库根目录的 meson_options.txt 文件中。在最终 1.26.0 版本发布之前将提供详细文档;目前请参阅 SciPy“从源代码构建”文档,因为大多数构建自定义方式在 SciPy 中的工作方式与 NumPy 中几乎相同。
构建依赖
虽然 NumPy 的运行时依赖关系没有改变,但构建依赖关系已经改变。由于我们暂时提供 Meson 和 meson-python,因此有几个新的依赖项 - 请查看 pyproject.toml 的 [build-system] 部分以获取详细信息。
故障排除
这次构建系统的更改相当大。在出现意外问题的情况下,仍然可以使用基于 setup.py 的构建作为临时解决方案(在 Python 3.9-3.11 上,而不是 3.12),方法是将 pyproject.toml.setuppy 复制到 pyproject.toml。但是,请在 NumPy 问题跟踪器上提出详细问题。我们的目标是尽快淘汰 setup.py 构建,因此希望在 1.26.0 发布周期的早期阶段发现所有潜在的阻碍因素。
贡献者
���共有 20 人为此版本做出了贡献。名字后面带有“+”的人第一次为此贡献了补丁。
-
@DWesl
-
Albert Steppi +
-
Bas van Beek
-
Charles Harris
-
Developer-Ecosystem-Engineering
-
Filipe Laíns +
-
Jake Vanderplas
-
Liang Yan +
-
Marten van Kerkwijk
-
Matti Picus
-
Melissa Weber Mendonça
-
Namami Shanker
-
Nathan Goldbaum
-
Ralf Gommers
-
Rohit Goswami
-
Sayed Adel
-
Sebastian Berg
-
Stefan van der Walt
-
Tyler Reddy
-
Warren Weckesser
合并的拉取请求
本次发布共合并了 59 个拉取请求。
-
#24305: 维护:为 1.26.x 分支准备开发
-
#24308: 维护:从主分支大规模更新文件以用于 numpy 1.26
-
#24322: CI:修复 1.26.x 分支上的 wheel 构建
-
#24326: 构建:更新 openblas 到更新版本
-
#24327: 类型:简化
_NestedSequence.__getitem__签名 -
#24328: 错误:修复 choose 引用计数泄漏
-
#24337: 测试:修复在没有 BLAS/LAPACK 的构建中运行测试套件的问题
-
#24338: 错误:修复 dirichlet 生成 nan 的问题。
-
#24340: 维护:从主分支进行 Dependabot 更新
-
#24342: 维护:重新添加 NPY_RUN_MYPY_IN_TESTSUITE=1
-
#24353: 维护:从主分支更新
extbuild.py。 -
#24356: 测试:修复最近 setuptools 中的弃用问题的 distutils 测试…
-
#24375: 维护:更新 cibuildwheel 到版本 2.15.0
-
#24381: 维护:修复 codespaces setup.sh 脚本
-
#24403: 增强:为多目标构建支持供应商 meson
-
#24404: 构建:供应商 meson-python 以使 Windows 构建支持 SIMD…
-
#24405: 构建,SIMD:meson CPU 调度器实现
-
#24406: 维护:移除 versioneer
-
#24409: 发布:为 NumPy 1.26.0b1 版本做准备。
-
#24453: 维护:固定 sphinx 的上限版本。
-
#24455: 增强:为 _ALIGN 宏添加前缀
-
#24456: 错误:清理警告[跳过 azp][跳过 circle][跳过 travis][跳过…
-
#24460: 维护:升级到 spin 0.5
-
#24495: 错误:
asv dev已被移除,请使用asv run。 -
#24496: 错误:由于未更改的 inplace 自动生成…修复 meson 构建失败
-
#24521: 错误:修复 git-version 脚本的问题,需要一个 shebang 才能运行
-
#24522: BUG: 为 git_hash 使用默认赋值 [跳过 ci]
-
#24524: BUG: 修复 choose 中的 NPY_cast_info 错误处理
-
#24526: BUG: 修复 f2py 中的常用块处理
-
#24541: CI,TYP: 将 mypy 升级至 1.4.1
-
#24542: BUG: 修复假定长度 f2py 回归
-
#24544: MAINT: 统一 fortranobject
-
#24545: TYP: 向 numpy.isin 类型规范添加 kind 参数
-
#24561: BUG: 修复掩码和未掩码结构化数组之间的比较
-
#24590: CI: 在 Cygwin 上排除导入库列表中的 DLLs。
-
#24591: BLD: 修复
_umath_linalg的依赖关系 -
#24594: MAINT: 停止在 ppc64le 上进行测试。
-
#24602: BLD: meson-cpu: 修复在没有功能的平台上的 SIMD 支持
-
#24606: BUG: 将 Cython 的
binding指令更改为“False”。 -
#24613: ENH: 采用新的 macOS Accelerate BLAS/LAPACK 接口,包括…
-
#24614: DOC: 更新构建文档以使用 Meson
-
#24615: TYP: 向
np.clip添加缺失的casting关键字 -
#24616: TST: 将 cython 测试从 setup.py 转换为 meson
-
#24617: MAINT: 修复
fromnumeric.pyi -
#24622: BUG, ENH: 修复
iso_c_binding类型映射和修复bind(c)… -
#24629: TYP: 允许
binary_repr接受任何实现的对象… -
#24630: TYP: 明确声明
dtype和generic可哈希 -
#24637: ENH: 使用
typing.assert_type重构类型“reveal”测试 -
#24638: MAINT: 将 actions/checkout 从 3.6.0 升级至 4.0.0
-
#24647: ENH:
f2py的meson后端 -
#24648: MAINT: 重构 Clang 的部分加载解决方法
-
#24653: REL: 为 NumPy 1.26.0rc1 版本做准备。
-
#24659: BLD: 允许指定长双精度格式以避免运行时…
-
#24665: BLD: 修复 random.mtrand 扩展中的错误,不链接 libnpyrandom
-
#24675: 构建:为 Windows 上的 32 位 Python 使用 MSVC 构建 wheels
-
#24700: 构建:修复交叉编译过程中的编译器选择问题
-
#24701: 错误:修复 f2py 中复杂值的数据语句处理
-
#24707: 类型:为 py3.12 缓冲区协议添加注释
-
#24718: 文档:修复 1.26.x 上的一些文档构建问题并更新 spin 文档…
新功能
numpy.array_api 中的 Array API v2022.12 支持
numpy.array_api现在完全支持 v2022.12 版本 的数组 API 标准。请注意,这还不包括标准中的可选fft扩展。
(gh-23789)
支持更新的 Accelerate BLAS/LAPACK 库
在 macOS 13.3 中添加了对更新的 Accelerate BLAS/LAPACK 库的支持,包括 ILP64(64 位整数)支持。这带来了 arm64 支持,并且对常用线性代数运算的性能提升高达 10 倍。在构建时选择 Accelerate 时,如果可用,将自动使用 13.3+ 版本。
(gh-24053)
f2py 的 meson ��端
f2py 在编译模式下(即 f2py -c)现在接受 --backend meson 选项。这是 Python 3.12 及以后版本的默认选项。旧版本仍将默认使用 --backend distutils。
为了在实际用例中支持这一点,在编译模式下,f2py 接受一个 --dep 标志一次或多次,它在 meson 后端中映射到 dependency() 调用,并在 distutils 后端中不执行任何操作。
对于仅作为代码生成器使用 f2py 的用户,没有任何更改,即没有 -c。
(gh-24532)
f2py 的 bind(c) 支持
函数和子程序都可以用 bind(c) 进行注释。f2py 将处理正确的类型映射,并保留其他 C 接口的唯一标签。
注意: bind(c, name = 'routine_name_other_than_fortran_routine') 是有意设计不被 f2py 绑定所接受的,因为 bind(c) 与 name 旨在仅保证 C 和 Fortran 中的相同名称,而不是 Python 和 Fortran 中的相同名称。
(gh-24555)
numpy.array_api 中的 Array API v2022.12 支持
numpy.array_api现在完全支持 v2022.12 版本 的数组 API 标准。请注意,这还不包括标准中的可选fft扩展。
(gh-23789)
支持更新的 Accelerate BLAS/LAPACK 库
在 macOS 13.3 中添加了对更新的 Accelerate BLAS/LAPACK 库的支持,包括 ILP64(64 位整数)支持。这带来了 arm64 支持,并且对常用线性代数运算的性能提升高达 10 倍。在构建时选择 Accelerate 时,如果可用,将自动使用 13.3+版本。
(gh-24053)
f2py的meson后端
编译模式下的f2py(即f2py -c)现在接受--backend meson选项。这是 Python 3.12及以后版本的默认选项。旧版本仍将默认为--backend distutils。
为了支持实际用例,在编译模式下,f2py接受一个--dep标志一次或多次,它映射到meson后端中的dependency()调用,并在distutils后端中不执行任何操作。
对于仅作为代码生成器使用f2py的用户,即没有-c的用户,没有任何更改。
(gh-24532)
f2py的bind(c)支持
函数和子程序都可以用bind(c)进行注释。f2py将处理正确的类型映射,并保留其他C接口的唯一标签。
注意: bind(c, name = 'routine_name_other_than_fortran_routine')是设计上不被f2py绑定所接受的,因为bind(c)与name旨在仅保证C和Fortran中的相同名称,而不是Python和Fortran中的相同名称。
(gh-24555)
改进
f2py的iso_c_binding支持
以前,用户必须定义自己的自定义f2cmap文件,以使用 Fortran2003 iso_c_binding内在模块定义的类型映射。这些类型映射现在由f2py原生支持。
(gh-24555)
f2py的iso_c_binding支持
以前,用户必须定义自己的自定义f2cmap文件,以使用 Fortran2003 iso_c_binding内在模块定义的类型映射。这些类型映射现在由f2py原生支持。
(gh-24555)
构建系统更改
在此版本中,NumPy 已切换到 Meson 作为构建系统,meson-python 作为构建后端。安装 NumPy 或构建轮可以使用标准工具如pip和pypa/build。以下是支持的:
-
常规安装:
pip install numpy或(在克隆的存储库中)pip install . -
构建轮:
python -m build(首选),或pip wheel . -
可编辑安装:
pip install -e . --no-build-isolation -
通过使用spin实现的自定义 CLI 进行开发构建:
spin build。
所有常规的pip和pypa/build标志(例如,--no-build-isolation)应按预期工作。
NumPy 特定的构建定制
许多定制 NumPy 构建的特定方式已经发生了变化。不再支持控制 BLAS/LAPACK、SIMD、线程和其他选项的NPY_*环境变量,也不再支持用于选择 BLAS 和 LAPACK 的site.cfg文件。相反,可以通过pip/build的配置设置界面传递给构建的命令行标志。这些标志都列在存储库根目录中的meson_options.txt文件中。详细文档将在最终 1.26.0 版本发布之前提供;目前请参阅SciPy“从源代码构建”文档,因为大多数构建定制方式在 SciPy 中的工作方式与在 NumPy 中的工作方式几乎相同。
构建依赖
虽然 NumPy 的运行时依赖关系没有改变,但构建依赖关系已经改变。由于我们暂时提供 Meson 和 meson-python,因此��几个新的依赖项 - 请查看pyproject.toml的[build-system]部分以获取详细信息。
故障排除
这种构建系统的变化相当大。在出现意外问题的情况下,仍然可以使用基于setup.py的构建作为临时解决方法(在 Python 3.9-3.11 上,而不是 3.12),方法是将pyproject.toml.setuppy复制到pyproject.toml。但是,请在 NumPy 问题跟踪器上提供有关问题的详细信息。我们的目标是尽快淘汰setup.py构建,因此希望在 1.26.0 版本发布周期的早期阶段就看到所有潜在的阻碍因素。
NumPy 特定的构建定制方式
许多定制 NumPy 构建的特定方式已经发生了变化。不再支持控制 BLAS/LAPACK、SIMD、线程和其他选项的NPY_*环境变量,也不再支持用于选择 BLAS 和 LAPACK 的site.cfg文件。相反,可以通过pip/build的配置设置界面传递给构建的命令行标志。这些标志都列在存储库根目录中的meson_options.txt文件中。详细文档将在最终 1.26.0 版本发布之前提供;目前请参阅SciPy“从源代码构建”文档,因为大多数构建定制方式在 SciPy 中的工作方式与在 NumPy 中的工作方式几乎相同。
构建依赖
虽然 NumPy 的运行时依赖关系没有改变,但构建依赖关系已经改变。由于我们暂时提供 Meson 和 meson-python,因此有几个新的依赖项 - 请查看pyproject.toml的[build-system]部分以获取详细信息。
故障排除
这种构建系统的变化相当大。在出现意外问题的情况下,仍然可以使用基于setup.py的构建作为临时解决方法(在 Python 3.9-3.11 上,而不是 3.12),方法是将pyproject.toml.setuppy复制到pyproject.toml。但是,请在 NumPy 问题跟踪器上提供有关问题的详细信息。我们的目标是尽快淘汰setup.py构建,因此希望在 1.26.0 版本发布周期的早期阶段就看到所有潜在的阻碍因素。
贡献者
本次发布共有 20 位贡献者。名字后面带有“+”的人第一次贡献了补丁。
-
@DWesl
-
Albert Steppi +
-
Bas van Beek
-
Charles Harris
-
Developer-Ecosystem-Engineering
-
Filipe Laíns +
-
Jake Vanderplas
-
Liang Yan +
-
Marten van Kerkwijk
-
Matti Picus
-
Melissa Weber Mendonça
-
Namami Shanker
-
Nathan Goldbaum
-
Ralf Gommers
-
Rohit Goswami
-
Sayed Adel
-
Sebastian Berg
-
Stefan van der Walt
-
Tyler Reddy
-
Warren Weckesser
合并的拉取请求
本次发布共合并了 59 个拉取请求。
-
#24305: 维护:为 1.26.x 分支做开发准备
-
#24308: 维护:从主要大规模更新文件以用于 numpy 1.26
-
#24322: CI:修复 1.26.x 分支上的 wheel 构建
-
#24326: 构建:更新 openblas 到更新版本
-
#24327: 类型:简化
_NestedSequence.__getitem__签名 -
#24328: 错误修复:修复 choose 引用计数泄漏
-
#24337: 测试:修复在没有 BLAS/LAPACK 的构建中运行测试套件
-
#24338: 错误修复:随机:修复 dirichlet 生成 nan 的问题。
-
#24340: 维护:从主要 Dependabot 更新
-
#24342: 维护:重新添加 NPY_RUN_MYPY_IN_TESTSUITE=1
-
#24353: 维护:从主要更新
extbuild.py。 -
#24356: 测试:修复 distutils 测试以适应最近 setuptools 中的弃用…
-
#24375: 维护:更新 cibuildwheel 到版本 2.15.0
-
#24381: 维护:修复 codespaces setup.sh 脚本
-
#24403: 增强:为多目标构建支持添加 meson 供应商
-
#24404: 构建:为使 Windows 构建支持 SIMD 而供应商 meson-python…
-
#24405: 构建,SIMD:meson CPU 调度器实现
-
#24406: 维护:移除 versioneer
-
#24409: 发布:为 NumPy 1.26.0b1 版本做准备。
-
#24453: 维护:固定 sphinx 的上限版本。
-
#24455: 增强:为 _ALIGN 宏添加前缀
-
#24456: 错误修复:清理警告 [跳过 azp][跳过 circle][跳过 travis][跳过…
-
#24460: 维护:升级到 spin 0.5
-
#24495: 错误修复:
asv dev已被移除,请使用asv run。 -
#24496: BUG: 修复 meson 构建失败,因为 inplace 自动生成的内容未更改…
-
#24521: BUG: 修复 git-version 脚本的问题,需要 shebang 才能运行
-
#24522: BUG: 为 git_hash 使用默认赋值 [跳过 ci]
-
#24524: BUG: 修复 choose 中的 NPY_cast_info 错误处理
-
#24526: BUG: 修复 f2py 中的 common block 处理
-
#24541: CI,TYP: 将 mypy 升级至 1.4.1
-
#24542: BUG: 修复假定长度 f2py 回归问题
-
#24544: MAINT: 统一 fortranobject
-
#24545: TYP: 向 numpy.isin 类型规范添加 kind 参数
-
#24561: BUG: 修复掩码和未掩码结构化数组之间的比较
-
#24590: CI: 在 Cygwin 上排除导入库的 DLL 列表。
-
#24591: BLD: 修复
_umath_linalg的依赖关系 -
#24594: MAINT: 停止在 ppc64le 上进行测试。
-
#24602: BLD: meson-cpu: 修复在没有功能的平台上的 SIMD 支持
-
#24606: BUG: 将 Cython 的
binding指令更改为“False”。 -
#24613: ENH: 采用新的 macOS Accelerate BLAS/LAPACK 接口,包括…
-
#24614: DOC: 更新构建文档以使用 Meson
-
#24615: TYP: 向
np.clip添加缺失的casting关键字 -
#24616: TST: 将 cython 测试从 setup.py 转换为 meson
-
#24617: MAINT: 修复
fromnumeric.pyi -
#24622: BUG, ENH: 修复
iso_c_binding类型映射和修复bind(c)… -
#24629: TYP: 允许
binary_repr接受任何实现… -
#24630: TYP: 明确声明
dtype和generic可哈希 -
#24637: ENH: 使用
typing.assert_type重构类型“reveal”测试 -
#24638: MAINT: 将 actions/checkout 从 3.6.0 升级到 4.0.0
-
#24647: ENH:
f2py的meson后端 -
#24648: MAINT: 重构 Clang 的部分加载解决方法
-
#24653: REL: 为 NumPy 1.26.0rc1 版本做准备。
-
#24659: BLD: 允许指定 long double 格式以避免运行时问题…
-
#24665: BLD: 修复 random.mtrand 扩展中的 bug,不链接 libnpyrandom
-
#24675: BLD: 在 Windows 上为 32 位 Python 构建 wheels,使用 MSVC
-
#24700: BLD: 修复交叉编译过程中编译器选择的问题
-
#24701: BUG: 修复 f2py 中对复数值的数据语句处理
-
#24707: TYP: 为 py3.12 缓冲区协议添加注释
-
#24718: DOC: 修复 1.26.x 上的一些文档构建问题,并更新 spin 文档…
NumPy 1.25.2 发布说明
NumPy 1.25.2 是一个维护版本,修复了在 1.25.1 发布后发现的错误和回归。这是 1.25.x 系列中计划的最后一个版本,下一个版本将是 1.26.0,将使用 meson 构建系统并支持 Python 3.12。这个版本支持的 Python 版本是 3.9-3.11。
贡献者
一共有 13 人为这个版本做出了贡献。名字后面带有“+”的人第一次贡献了补丁。
-
Aaron Meurer
-
Andrew Nelson
-
Charles Harris
-
Kevin Sheppard
-
Matti Picus
-
Nathan Goldbaum
-
Peter Hawkins
-
Ralf Gommers
-
Randy Eckenrode +
-
Sam James +
-
Sebastian Berg
-
Tyler Reddy
-
dependabot[bot]
合并的拉取请求
一共有 19 个拉取请求被合并到这个版本中。
-
#24148: 维护:为进一步开发准备 1.25.x
-
#24174: 增强:改善 clang-cl 兼容性
-
#24179: 维护:升级各种构建依赖项。
-
#24182: 构建:在 macOS 上使用
-ftrapping-math与 Clang -
#24183: 错误:在 ufunc_at 快速路径中正确处理负索引
-
#24184: 错误:在 setflags 中处理 PyObject_IsTrue 和 PyObject_Not 错误
-
#24185: 错误:直方图小范围鲁棒性
-
#24186: 维护:从主分支更新 meson.build 文件
-
#24234: 维护:从
np.__all__中排除 min、max 和 round -
#24241: 维护:Dependabot 更新
-
#24242: 错误:修复 np.array_api.take 的签名
-
#24243: 构建:将 OpenBLAS 更新到一个中间提交
-
#24244: 错误:修复 str(scalar) 中的引用计数泄漏。
-
#24245: 错误:修复无效函数指针转换错误
-
#24255: 错误:分离出用于内存策略警告的缓慢
getenv调用 -
#24292: CI:在 cirrus.star 中更正 URL [跳过 cirrus]
-
#24293: 错误:在 scalartypes 中修复 C 类型
-
#24294: 错误:不要修改 ufunc_at 的输入
-
#24295: 错误:进一步修复索引循环并添加测试
贡献者
一共有 13 人为这个版本做出了贡献。名字后面带有“+”的人第一次贡献了补丁。
-
Aaron Meurer
-
Andrew Nelson
-
Charles Harris
-
Kevin Sheppard
-
Matti Picus
-
Nathan Goldbaum
-
Peter Hawkins
-
Ralf Gommers
-
Randy Eckenrode +
-
Sam James +
-
Sebastian Berg
-
Tyler Reddy
-
dependabot[bot]
合并的拉取请求
本次发布共合并了 19 个拉取请求。
-
#24148: MAINT: 为 1.25.x 做进一步开发准备
-
#24174: ENH: 改进 clang-cl 兼容性
-
#24179: MAINT: 升级各种构建依赖项。
-
#24182: BLD: 在 macOS 上使用
-ftrapping-math与 Clang -
#24183: BUG: 在 ufunc_at 快速路径中正确处理负索引
-
#24184: BUG: 在 setflags 中处理 PyObject_IsTrue 和 PyObject_Not 错误
-
#24185: BUG: 直方图小范围鲁棒性
-
#24186: MAINT: 从主分支更新 meson.build 文件
-
#24234: MAINT: 从
np.__all__中排除 min、max 和 round -
#24241: MAINT: Dependabot 更新
-
#24242: BUG: 修复 np.array_api.take 的签名
-
#24243: BLD: 将 OpenBLAS 更新到一个中间提交
-
#24244: BUG: 修复 str(scalar)中的引用计数泄漏。
-
#24245: BUG: 修复无效函数指针转换错误
-
#24255: BUG: 分离出用于内存策略警告的缓慢
getenv调用 -
#24292: CI: 修正 cirrus.star 中的 URL [跳过 cirrus]
-
#24293: BUG: 修复 scalartypes 中的 C 类型
-
#24294: BUG: 不要修改 ufunc_at 的输入
-
#24295: BUG: 进一步修复索引循环并添加测试
NumPy 1.25.1 发布说明
NumPy 1.25.1 是一个维护版本,修复了 1.25.0 发布后发现的错误和回归问题。此版本支持的 Python 版本为 3.9-3.11。
贡献者
总共有 10 人为此版本做出了贡献。名字后带有“+”的人第一次贡献了补丁。
-
Andrew Nelson
-
Charles Harris
-
Developer-Ecosystem-Engineering
-
Hood Chatham
-
Nathan Goldbaum
-
Rohit Goswami
-
Sebastian Berg
-
Tim Paine +
-
dependabot[bot]
-
matoro +
合并的拉取请求
总共有 14 个拉取请求合并到此版本中。
-
#23968: MAINT: 为 1.25.x 版本做进一步开发准备
-
#24036: BLD: 将长双精度识别移植到 meson 的 C 语言中
-
#24037: BUG: 修复 reduction
return NULL为goto fail -
#24038: BUG: 避免在 array.astype()中出现未定义行为
-
#24039: BUG: 确保
__array_ufunc__在没有传递任何 kwargs 的情况下正常工作 -
#24117: MAINT: 固定 urllib3 以避免 anaconda-client bug。
-
#24118: TST: 在 Pyodide 工作流中固定 pydantic<2
-
#24119: MAINT: 将 pypa/cibuildwheel 从 2.13.0 升级到 2.13.1
-
#24120: MAINT: 将 actions/checkout 从 3.5.2 升级到 3.5.3
-
#24122: BUG: 使用 SIMD 进行乘法或除法时,没有完整向量可以…
-
#24127: MAINT: 对 IS_MUSL 进行测试,关闭#24074
-
#24128: BUG: 仅在维度发生变化时暂时替换 dtype
-
#24129: MAINT: 将 actions/setup-node 从 3.6.0 升级到 3.7.0
-
#24134: BUG: 修复 f2py 模块中的私有过程
贡献者
总共有 10 人为此版本做出了贡献。名字后带有“+”的人第一次贡献了补丁。
-
Andrew Nelson
-
Charles Harris
-
Developer-Ecosystem-Engineering
-
Hood Chatham
-
Nathan Goldbaum
-
Rohit Goswami
-
Sebastian Berg
-
Tim Paine +
-
dependabot[bot]
-
matoro +
合并的拉取请求
总共有 14 个拉取请求合并到此版本中。
-
#23968: MAINT: 为 1.25.x 版本做进一步开发准备
-
#24036: BLD: 将长双精度识别移植到 meson 的 C 语言中
-
#24037: BUG: 修复 reduction
return NULL为goto fail -
#24038: BUG: 避免在 array.astype()中出现未定义行为
-
#24039: BUG: 确保
__array_ufunc__在不传递任何 kwargs 的情况下正常工作 -
#24117: MAINT: 固定 urllib3 以避免 anaconda-client 的 bug。
-
#24118: TST: 在 Pyodide 工作流中固定 pydantic<2
-
#24119: MAINT: 将 pypa/cibuildwheel 从 2.13.0 升级到 2.13.1
-
#24120: MAINT: 将 actions/checkout 从 3.5.2 升级到 3.5.3
-
#24122: BUG: 使用 SIMD 进行乘法或除法时,如果没有完整的向量...
-
#24127: MAINT: 测试 IS_MUSL,关闭 #24074
-
#24128: BUG: 仅在维度发生变化时临时替换 dtype
-
#24129: MAINT: 将 actions/setup-node 从 3.6.0 升级到 3.7.0
-
#24134: BUG: 修复 f2py 模块中的私有程序
NumPy 1.25.0 发布说明
NumPy 1.25.0 版本持续改进处理和提升数据类型(dtypes)的工作,增加执行速度,并澄清文档。还进行了为未来 NumPy 2.0.0 版本做准备的工作,导致大量新的和过时的弃用。亮点包括:
-
支持 MUSL,现在有 MUSL wheels。
-
支持富士通 C/C++ 编译器。
-
现在支持对象数组在 einsum 中使用
-
支持原地矩阵乘法 (
@=)。
当 Python 3.12 发布时,我们将发布 NumPy 1.26 版本。这是必要的,因为 Python 3.12 放弃了 distutils,我们将转而使用 meson 进行未来构建。下一个主要发布版本将是 NumPy 2.0.0。我们计划 2.0 系列仍将支持针对早期 NumPy 版本构建的下游项目。
本版本支持的 Python 版本为 3.9-3.11。
弃用
-
np.core.MachAr已弃用。这是私有 API。在np.core中定义的名称通常应视为私有。(gh-22638)
-
np.finfo(None)已弃用。(gh-23011)
-
np.round_已弃用。请改用 np.round。(gh-23302)
-
np.product已弃用。请改用 np.prod。(gh-23314)
-
np.cumproduct已弃用。请改用 np.cumprod。(gh-23314)
-
np.sometrue已弃用。请改用 np.any。(gh-23314)
-
np.alltrue已弃用。请改用 np.all。(gh-23314)
-
仅 ndim-0 数组被视为标量。NumPy 曾将所有大小为 1 的数组(例如,
np.array([3.14]))视为标量。将来,这将限制为 ndim 0 的数组(例如,np.array(3.14))。以下表达式将报告弃用警告:a = np.array([3.14]) float(a) # better: a[0] to get the numpy.float or a.item() b = np.array([[3.14]]) c = numpy.random.rand(10) c[0] = b # better: c[0] = b[0, 0](gh-10615)
-
np.find_common_type已被弃用。numpy.find_common_type现已被弃用,应该用numpy.result_type或numpy.promote_types替换。大多数用户将find_common_type的第二个scalar_types参数保留为[],在这种情况下,np.result_type和np.promote_types都更快且更可靠。当不使用scalar_types时,主要区别在于替代故意将非本机字节顺序转换为本机字节顺序。此外,find_common_type返回objectdtype 而不是失败的提升。当输入不全为数值时,这会导致差异。重要的是,对于例如时间间隔/日期时间这样的情况,NumPy 提升规则目前有时会令人惊讶。当
scalar_types参数不是[]时,情况会变得更加复杂。在大多数情况下,使用np.result_type并传递 Python 值0,0.0或0j的结果与在scalar_types中使用int,float或complex相同。当构建
scalar_types时,np.result_type是正确的替代方案,可以传递标量值如np.float32(0.0)。传递除 0 以外的值可能会导致值检查行为(np.find_common_type从未使用过,NEP 50 将来可能会更改)。在这种情况下,主要的行为变化可能是当数组类型为有符号整数而标量类型为无符号整数时。如果您不确定如何替换对
scalar_types的使用,或者可能存在非数值 dtype,请不要犹豫打开一个 NumPy 问题寻求帮助。(gh-22539)
已过时的弃用行为
-
np.core.machar和np.finfo.machar已被移除。(gh-22638)
-
当 dtype 不是数值时,
+arr现在会引发错误(正数未定义)。(gh-22998)
-
现在必须将序列传递给堆叠函数家族(
stack,vstack,hstack,dstack和column_stack)。(gh-23019)
-
np.clip现在默认使用相同类型转换。在 NumPy 1.17 中,回退到不安全的转换已被弃用。(gh-23403)
-
np.clip现在会传播作为min或max传递的np.nan值。以前,标量 NaN 通常被忽略。这在 NumPy 1.17 中已被弃用。(gh-23403)
-
np.dual子模块已被移除。(gh-23480)
-
NumPy 现在总是忽略数组类似对象的序列行为(定义了数组协议之一)。(从 NumPy 1.20 开始弃用)
(gh-23660)
-
在
astype或asarray等数组创建函数中,当转换为子数组 dtype 时出现的FutureWarning现已最终确定。现在的行为总是与将子数组 dtype 包装成单个字段时相同(这是以前的解决方法)。 (自 NumPy 1.20 起的 FutureWarning)(gh-23666)
-
==和!=警告已最终确定。 数组上的==和!=运算符现在总是:-
引发在比较期间发生的错误,例如当数组具有不兼容的形状时(
np.array([1, 2]) == np.array([1, 2, 3]))。 -
当值在根本上不可比较时(例如具有不同的 dtype)返回一个全为
True或全为False的数组。 一个例子是np.array(["a"]) == np.array([1])。这模仿了 Python 在比较不兼容类型时返回
False和True的行为,例如"a" == 1和"a" != 1。 很长一段时间以来,这些都会产生DeprecationWarning或FutureWarning。
(gh-22707)
-
-
已移除对 Nose 的支持。 NumPy 在 2018 年转而使用 pytest,而 nose 已经多年未得到维护。 我们保留了 NumPy 的 nose 支持,以避免破坏可能仍在使用它而尚未转换为 pytest 或其他测试框架的下游项目。 随着 Python 3.12 的到来,未打补丁的 nose 将引发错误。 是时候继续前进了。
已移除的装饰器:
-
raises
-
慢
-
setastest
-
skipif
-
knownfailif
-
已弃用
-
参数化
-
_needs_refcount
这些不应与具有类似名称的 pytest 版本混淆,例如 pytest.mark.slow,pytest.mark.skipif,pytest.mark.parametrize。
已移除的函数:
-
测试员
-
import_nose
-
run_module_suite
(gh-23041)
-
-
已移除
numpy.testing.utils的 shim。 自 2019 年以来,从numpy.testing.utils的 shim 导入已被弃用,现在已删除该 shim。 所有导入应直接从numpy.testing进行。(gh-23060)
-
已移除禁用调度的环境变量。 已移除对
NUMPY_EXPERIMENTAL_ARRAY_FUNCTION环境变量的支持。 此变量禁用了__array_function__的调度。(gh-23376)
-
已移除对
y=作为out=的别名的支持。fix,isposinf和isneginf函数允许使用y=作为out=的(已弃用的)别名。 这不再受支持。(gh-23376)
兼容性说明
-
busday_count方法现在正确处理begindates晚于enddates的情况。 以前,即使文档规定始日期始终不包括在内,enddates也会被包括在内。(gh-23229)
-
当使用
np.equal或np.not_equal比较日期时间和时间间隔时,numpy 以前允许使用casting="unsafe"进行比较。这个操作现在会失败。通过使用dtype关键字参数强制输出 dtype 可以使操作成功,但我们不建议这样做。(gh-22707)
-
当使用
np.load从文件句柄加载数据时,如果句柄位于文件末尾,可能会通过多次调用np.load读取多个数组,numpy 以前会在allow_pickle=False时引发ValueError,在allow_pickle=True时引发OSError。现在无论哪种情况都会引发EOFError。(gh-23105)
使用mode=wrap的np.pad用原始数据的严格倍数填充
基于早期版本的pad的代码,使用mode="wrap",当填充大小大于初始数组时,将返回不同的结果。
使用mode=wrap的np.pad现在总是用原始数据的严格倍数填充空间,即使填充大小大于初始数组。
(gh-22575)
移除了 Cython 中的long_t和ulong_t
long_t和ulong_t是longlong_t和ulonglong_t的别名,令人困惑(Python 2 的遗留物)。这个更改可能会导致错误:
'long_t' is not a type identifier
'ulong_t' is not a type identifier
我们推荐使用诸如cnp.int64_t这样的位大小类型,或者使用在 32 位系统上为 32 位,在 64 位系统上为 64 位的cnp.intp_t(这对索引最兼容)。如果需要 C long,请使用普通的long或npy_long。cnp.int_t也是long(NumPy 的默认整数)。但是,在 64 位 Windows 上,long是 32 位的,即使在 NumPy 中我们可能希望调整这一点。(如果您对此感到好奇,请随时联系 NumPy 开发人员。)
(gh-22637)
更改了对ufunc的错误消息和类型的错误axes参数
当向ufunc(..., axes=[...])传递错误的axes值时,错误消息和类型已更改。现在的消息更能指示问题,如果值不匹配,则会引发AxisError。对于无效的输入类型仍会引发TypeError。
(gh-22675)
定义了__array_ufunc__的类数组现在可以在作为where使用时覆盖 ufuncs
如果numpy.ufunc的where关键字参数是numpy.ndarray的子类,或者是定义了numpy.class.__array_ufunc__的鸭子类型,它可以使用与输入和输出参数相同的机制覆盖 ufunc 的行为。请注意,为了使其正常工作,where.__array_ufunc__实现将必须解包where参数以将其传递给ufunc的默认实现,或者对于numpy.ndarray子类,在使用super().__array_ufunc__之前。
(gh-23240)
现在默认情况下,针��NumPy C API 的编译是向后兼容的
NumPy 现在默认公开 C-API 的向后兼容子集。这使得使用oldest-supported-numpy变得不必要。库可以通过在包含 NumPy 之前或通过向编译器传递等效的-D选项来覆盖默认的最小版本,以便与使用:
#define NPY_TARGET_VERSION NPY_1_22_API_VERSION
NumPy 1.25 的默认值是NPY_1_19_API_VERSION。因为 NumPy 1.19 C API 与 NumPy 1.16 相同,因此生成的程序将与 NumPy 1.16 兼容(从 C-API 的角度来看)。这个默认值将在未来的非 bug 修复版本中增加。您仍然可以针对较旧的 NumPy 版本进行编译,并在更新的版本上运行。
更多详细信息请参见对于下游包作者。
(gh-23528)
新功能
np.einsum现在接受具有object dtype 的数组
代码路径将在对象 dtype 数组上调用 python 运算符,就像np.dot和np.matmul一样。
(gh-18053)
增加了对原地矩阵乘法的支持
现在可以通过@=运算符执行原地矩阵乘法。
>>> import numpy as np
>>> a = np.arange(6).reshape(3, 2)
>>> print(a)
[[0 1]
[2 3]
[4 5]]
>>> b = np.ones((2, 2), dtype=int)
>>> a @= b
>>> print(a)
[[1 1]
[5 5]
[9 9]]
(gh-21120)
添加了NPY_ENABLE_CPU_FEATURES环境变量
用户现在可以选择在运行时通过指定NPY_ENABLE_CPU_FEATURES环境变量来启用内置 CPU 功能的子集。请注意,这些指定的功能必须在基线之外,因为基线始终被假定。如果尝试启用 CPU 不支持的功能,或者 NumPy 未构建的功能,将会引发错误。
(gh-22137)
NumPy 现在有一个np.exceptions命名空间
NumPy 现在有一个专用的命名空间,使大多数异常和警告可用。所有这些仍然在主命名空间中可用,尽管一些可能会在将来慢慢移动。这样做的主要原因是增加可发现性并添加未来的异常。
(gh-22644)
np.linalg 函数返回 NamedTuples
返回元组的 np.linalg 函数现在返回命名元组。这些函数是 eig()、eigh()、qr()、slogdet() 和 svd()。在这些函数返回具有特定关键字参数的非元组的实例中,返回类型保持不变(例如 svd(compute_uv=False))。
(gh-22786)
np.char 中的字符串函数与 NEP 42 自定义数据类型兼容
现在可以将表示 Unicode 字符串或字节字符串的自定义数据类型传递给 np.char 中的字符串函数。
(gh-22863)
可以从字符串抽象数据类型类创建字符串数据类型实例
现在可以创建具有大小的字符串数据类型实例,而无需使用数据类型的字符串名称。例如,type(np.dtype('U'))(8) 将创建一个等效于 np.dtype('U8') 的数据类型。在编写处理字符串数据类型类的通用代码时,此功能非常有用。
(gh-22963)
现在支持富士通 C/C++ 编译器
添加了对富士通编译器的支持。要使用富士通编译器构建,请运行:
python setup.py build -c fujitsu
现在支持 SSL2
添加了对 SSL2 的支持。SSL2 是一个提供 OpenBLAS 兼容 GEMM 函数的库。要启用 SSL2,需要编辑 site.cfg 并使用富士通编译器构建。请参阅 site.cfg.example。
(gh-22982)
改进
NDArrayOperatorsMixin 指定没有 __slots__
NDArrayOperatorsMixin 类现在指定不包含 __slots__,确保子类现在可以在 Python 中使用此功能。
(gh-23113)
修复复数零的幂
np.power ��在为复数返回不同的结果 0^{非零}。请注意,当指数的实部大于零时才定义该值。以前,除非虚部严格为零,否则返回 NaN。返回值为 0+0j 或 0-0j。
(gh-18535)
新的 DTypePromotionError
NumPy 现在有一个新的 DTypePromotionError,当两个数据类型无法提升为公共数据类型时使用,例如:
np.result_type("M8[s]", np.complex128)
引发此新异常。
(gh-22707)
np.show_config 使用来自 Meson 的信息
构建和系统信息现在包含来自 Meson 的信息。np.show_config 现在具有一个新的可选参数 mode,可帮助自定义输出。
(gh-22769)
修复 np.ma.diff 在使用参数 prepend/append 时未保留掩码的问题。
使用参数 prepend 和/或 append 调用 np.ma.diff 现在返回一个保留输入掩码的 MaskedArray。
以前,返回没有掩码的 MaskedArray。
(gh-22776)
修正了 Cython 中 NumPy C-API 的错误处理
许多为在 Cython 中使用而定义的 NumPy C 函数缺乏正确的错误指示器,如 except -1 或 except *。现在已经添加了这些。
(gh-22997)
直接生成随机数生成器的能力
numpy.random.Generator.spawn 现在允许通过 numpy.random.SeedSequence.spawn 机制直接生成新的独立子生成器。numpy.random.BitGenerator.spawn 对底层位生成器执行相同操作。
此外,numpy.random.BitGenerator.seed_seq 现在直接访问用于初始化位生成器的种子序列。例如,这允许:
seed = 0x2e09b90939db40c400f8f22dae617151
rng = np.random.default_rng(seed)
child_rng1, child_rng2 = rng.spawn(2)
# safely use rng, child_rng1, and child_rng2
以前,这是很难做到的,没有显式传递 SeedSequence。请参阅 numpy.random.SeedSequence 获取更多信息。
(gh-23195)
numpy.logspace 现在支持非标量 base 参数
numpy.logspace 的 base 参数现在可以是类似数组的,如果可以与 start 和 stop 参数进行广播。
(gh-23275)
np.ma.dot() 现在支持非 2d 数组
以前 np.ma.dot() 仅在 a 和 b 都是 2d 时才起作用。现在它也适用于非 2d 数组,如 np.dot()。
(gh-23322)
显式显示 .npz 文件的键在 repr 中
打印 NpzFile 时显示加载的 .npz 文件的键。
>>> npzfile = np.load('arr.npz')
>>> npzfile
NpzFile 'arr.npz' with keys arr_0, arr_1, arr_2, arr_3, arr_4...
(gh-23357)
NumPy 现在在 np.dtypes 中公开了 DType 类
新的 numpy.dtypes 模块现在公开了 DType 类,并将包含未来与 dtype 相关的功能。大多数用户不需要直接使用这些类。
(gh-23358)
在 .npy 或 .npz 文件中保存之前删除 dtype 元数据
目前,包含具有元数据的 dtype 的表的 *.npy 文件无法读取。现在,np.save 和 np.savez 在保存之前会删除元数据。
(gh-23371)
numpy.lib.recfunctions.structured_to_unstructured 在更多情况下返回视图
structured_to_unstructured 现在返回一个视图,如果字段之间的步幅是恒定的。之前,字段之间的填充或反转字段会导致复制。此更改仅适用于 ndarray、memmap 和 recarray。对于所有其他数组子类,行为保持不变。
(gh-23652)
有符号和无符号整数始终正确比较
当在 NumPy 中混合使用 uint64 和 int64 时,NumPy 通常会将两者都提升为 float64。这种行为可能会引起争议,但对于比较 ==、<= 来说是令人困惑的,因为返回的结果可能是不正确的,但转换是隐藏的,因为结果是布尔值。现在 NumPy 将通过避免转换为浮点数来返回这些正确的结果。
(gh-23713)
性能改进和变化
在启用 AVX-512 的处理器上更快的 np.argsort
32 位和 64 位快速排序算法对 np.argsort 可以在支持 AVX-512 指令集的处理器上提高多达 6 倍的速度。
感谢 英特尔公司 赞助此工作。
(gh-23707)
在启用 AVX-512 的处理器上更快的 np.sort
16 位和 64 位数据类型的快速排序在支持 AVX-512 指令集的处理器上提高了多达 15 倍和 9 倍的速度。
感谢 英特尔公司 赞助此工作。
(gh-22315)
__array_function__ 机制现在更快
NumPy 中大多数函数的开销现在更小,特别是在使用关键字参数时。这一变化显著加快了许多简单函数调用的速度。
(gh-23020)
ufunc.at 可以更快
通用的 ufunc.at 可以提高多达 9 倍的速度。此加速的条件:
-
操作数已对齐
-
不进行强制转换
如果在满足上述条件的情况下,对 1 维参数使用适当的索引循环的 ufuncs,ufunc.at 的速度可以提高多达 60 倍(额外提升 7 倍速度)。已经在 add、subtract、multiply、floor_divide、maximum、minimum、fmax 和 fmin 中添加了适当的索引循环。
内部逻辑类似于常规 ufuncs 使用的逻辑,也有快速路径。
感谢 D. E. Shaw 集团 赞助此工作。
(gh-23136)
更快的 NpzFile 成员测试
NpzFile 上的成员测试如果成功将不再解压存档。
(gh-23661)
变化
np.r_[] 和 np.c_[] 与特定标量值
在罕见情况下,主要使用 np.r_ 与标量可能导致不同的结果。主要潜在变化如下所示:
>>> np.r_[np.arange(5, dtype=np.uint8), -1].dtype
int16 # rather than the default integer (int64 or int32)
>>> np.r_[np.arange(5, dtype=np.int8), 255]
array([ 0, 1, 2, 3, 4, 255], dtype=int16)
第二个示例返回:
array([ 0, 1, 2, 3, 4, -1], dtype=int8)
第一个是由于带有无符号整数数组的有符号整数标量,而第二个是由于255无法容纳在int8中,NumPy 目前正在检查值以使其正常工作。(请注意,由于NEP 50; 未来预计第二个示例将发生变化,然后将引发错误。)
(gh-22539)
大多数 NumPy 函数被包装为 C 可调用函数
为加快__array_function__分派速度,大多数 NumPy 函数现在被包装为 C 可调用函数,而不是真正的 Python 函数或 C 方法。它们看起来和以前一样(像一个 Python 函数),这只会提高性能和用户体验(更清晰的回溯)。但是,如果此更改因某种原因使您的程序混淆,请通知 NumPy 开发人员。
(gh-23020)
C++标准库使用
NumPy 构建现在依赖于 C++标准库,因为numpy.core._multiarray_umath扩展与 C++链接器链接。
(gh-23601)
弃用
-
np.core.MachAr已被弃用。这是私有 API。在np.core中定义的名称通常应被视为私有。(gh-22638)
-
np.finfo(None)已被弃用。(gh-23011)
-
np.round_已被弃用。请改用np.round。(gh-23302)
-
np.product已被弃用。请改用np.prod。(gh-23314)
-
np.cumproduct已被弃用。请改用np.cumprod。(gh-23314)
-
np.sometrue已被弃用。请改用np.any。(gh-23314)
-
np.alltrue已被弃用。请改用np.all。(gh-23314)
-
仅将 ndim-0 数组视为标量。NumPy 过去将所有大小为 1 的数组(例如,
np.array([3.14]))视为标量。将来,这将限制为 ndim 0 的数组(例如,np.array(3.14))。以下表达式将报告弃用警告:a = np.array([3.14]) float(a) # better: a[0] to get the numpy.float or a.item() b = np.array([[3.14]]) c = numpy.random.rand(10) c[0] = b # better: c[0] = b[0, 0](gh-10615)
-
np.find_common_type已被弃用。numpy.find_common_type现在已被弃用,应该用numpy.result_type或numpy.promote_types替代。大多数用户将find_common_type的第二个scalar_types参数设为[],在这种情况下,np.result_type和np.promote_types都更快且更可靠。当不使用scalar_types时,主要区别在于替代意图将非本机字节顺序转换为本机字节顺序。此外,find_common_type返回objectdtype 而不是失败的提升。当输入不全为数字时,这会导致差异。重要的是,对于例如 timedelta/datetime 这样的情况,NumPy 提升规则目前有时会令人惊讶。当
scalar_types参数不是[]时,情况会更加复杂。在大多数情况下,使用np.result_type并传递 Python 值0、0.0或0j的结果与在 scalar_types 中使用int、float或complex是相同的。当构建
scalar_types时,np.result_type是正确的替代方案,可以传递标量值如np.float32(0.0)。传递非 0 的值可能导致值检查行为(np.find_common_type从未使用过,NEP 50 可能会在未来更改)。在这种情况下,主要可能的行为变化是当数组类型为有符号整数而标量类型为无符号整数时。如果您不确定如何替换
scalar_types的使用,或者非数值 dtype 可能存在,请不要犹豫打开一个 NumPy 问题寻求帮助。(gh-22539)
过期的弃用
-
np.core.machar和np.finfo.machar已被移除。(gh-22638)
-
当 dtype 不是数值时,
+arr现在会引发错误(正数未定义)。(gh-22998)
-
现在必须将序列传递给堆叠函数家族(
stack、vstack、hstack、dstack和column_stack)。(gh-23019)
-
np.clip现在默认使用相同类型转换。在 NumPy 1.17 中,回退到不安全的转换已被弃用。(gh-23403)
-
np.clip现在会传播作为min或max传递的np.nan值。以前,标量 NaN 通常被忽略。在 NumPy 1.17 中已被弃用。(gh-23403)
-
np.dual子模块已被移除。(gh-23480)
-
NumPy 现在总是忽略数组类似对象的序列行为(定义数组协议之一)。(从 NumPy 1.20 开始弃用)
(gh-23660)
-
在
astype或数组创建函数(如asarray)中转换为子数组 dtype 时的FutureWarning现已最终确定。现在的行为总是与将子数组 dtype 包装成单个字段时相同(这是以前的解决方法)。(自 NumPy 1.20 起为 FutureWarning)(gh-23666)
-
==和!=警告已最终确定。现在数组上的==和!=运算符总是:-
在比较过程中引发错误,例如当数组具有不兼容的形状时(
np.array([1, 2]) == np.array([1, 2, 3]))。 -
当值在本质上不可比较时(例如具有不同的 dtype),返回全部为
True或全部为False的数组。一个例子是np.array(["a"]) == np.array([1])。这模仿了 Python 的行为,当比较不兼容类型时返回
False和True,例如"a" == 1和"a" != 1。很长一段时间,这些会产生DeprecationWarning或FutureWarning。
(gh-22707)
-
-
已移除 Nose 支持。NumPy 在 2018 年转而使用 pytest,而 nose 已经多年未得到维护。我们保留了 NumPy 的 nose 支持,以避免破坏可能仍在使用它而尚未转换为 pytest 或其他测试框架的下游项目。随着 Python 3.12 的到来,未打补丁的 nose 将引发错误。是时候前进了。
已移除的装饰器:
-
raises
-
slow
-
setastest
-
skipif
-
knownfailif
-
deprecated
-
parametrize
-
_needs_refcount
这些不应与具有类似名称的 pytest 版本混淆,例如 pytest.mark.slow、pytest.mark.skipif、pytest.mark.parametrize。
已移除的函数:
-
Tester
-
import_nose
-
run_module_suite
(gh-23041)
-
-
已移除
numpy.testing.utils的 shim。自 2019 年以来,从numpy.testing.utils的 shim 导入已被弃用,现已移除。所有导入应直接从numpy.testing进行。(gh-23060)
-
已移除禁用分派的环境变量。已移除对
NUMPY_EXPERIMENTAL_ARRAY_FUNCTION环境变量的支持。此变量禁用了__array_function__的分派。(gh-23376)
-
已移除
y=作为out=的别名的支持。fix、isposinf和isneginf函数允许使用y=作为(已弃用的)out=的别名。这不再受支持。(gh-23376)
兼容性说明
-
busday_count方法现在正确处理begindates晚于enddates的情况。以前,即使文档规定始终排除enddates,但enddates仍然被包括在内。(gh-23229)
-
使用
np.equal或np.not_equal比较日期时间和时间增量时,numpy 以前允许使用casting="unsafe"进行比较。现在此操作会失败。通过使用dtype关键字参数强制输出数据类型可以使操作成功,但我们不建议这样做。(gh-22707)
-
当使用
np.load从文件句柄加载数据时,如果句柄位于文件末尾,可能会通过多次调用np.load读取多个数组,numpy 以前在allow_pickle=False时引发ValueError,在allow_pickle=True时引发OSError。现在无论哪种情况都会引发EOFError。(gh-23105)
使用 mode=wrap 的 np.pad 会以原始数据的严格倍数进行填充
基于早期版本的 pad 的代码使用 mode="wrap",当填充大小大于初始数组时,将返回不同的结果。
使用 mode=wrap 的 np.pad 现在始终以原始数据的严格倍数填充空间,即使填充大小大于初始数组。
(gh-22575)
移除了 Cython 中的 long_t 和 ulong_t
long_t 和 ulong_t 是 longlong_t 和 ulonglong_t 的别名,这容易引起混淆(这是 Python 2 的遗留问题)。这个改变可能导致以下错误:
'long_t' is not a type identifier
'ulong_t' is not a type identifier
我们建议使用诸如 cnp.int64_t 这样的位大小类型,或者使用 cnp.intp_t,在 32 位系统上为 32 位,在 64 位系统上为 64 位(这对索引最兼容)。如果需要 C 的 long,请使用普通的 long 或 npy_long。cnp.int_t 也是 long(NumPy 的默认整数)。但是,在 64 位 Windows 上,long 是 32 位,即使在 NumPy 中我们可能希望调整这一点。(如果您对此感到好奇,请随时联系 NumPy 开发人员。)
(gh-22637)
对于 ufunc 的错误 axes 参数,已更改错误消息和类型
当向 ufunc(..., axes=[...]) 传递错误的 axes 值时,错误消息和类型已更改。现在的消息更具指示性,如果值不匹配,则会引发 AxisError。对于无效的输入类型仍会引发 TypeError。
(gh-22675)
定义了 __array_ufunc__ 的类数组现在可以在作为 where 使用时覆盖 ufuncs。
如果numpy.ufunc的where关键字参数是numpy.ndarray的子类或者是定义了numpy.class.__array_ufunc__的鸭子类型,它可以通过与输入和输出参数相同的机制覆盖ufunc的行为。请注意,为了使其正常工作,where.__array_ufunc__的实现将必须解开where参数以将其传递给ufunc的默认实现,或者在使用super().__array_ufunc__之前将其传递给numpy.ndarray的子类。
(gh-23240)
现在,默认情况下,针对 NumPy C API 进行编译是向后兼容的。
NumPy 现在默认公开一个向后兼容的 C-API 子集。这使得使用oldest-supported-numpy变得不必要。库可以覆盖默认的最小版本以与以下兼容:
#define NPY_TARGET_VERSION NPY_1_22_API_VERSION
在包含 NumPy 之前或通过将等效的-D选项传递给编译器之前。NumPy 1.25 的默认值是NPY_1_19_API_VERSION。因为 NumPy 1.19 C API 与 NumPy 1.16 相同,因此生成的程序将与 NumPy 1.16 兼容(从 C-API 的角度看)。这个默认值将在未来的非 bug 修复版本中增加。您仍然可以针对较旧的 NumPy 版本进行编译,并在更新的版本上运行。
更多细节请参见 For downstream package authors。
(gh-23528)
使用mode=wrap的np.pad使用原始数据的严格倍数填充。
基于早期版本的pad的代码,使用mode="wrap"会在填充大小大于初始数组时返回不同的结果。
现在,np.pad使用mode=wrap时,即使填充大小大于初始数组,也始终使用原始数据的严格倍数填充空间。
(gh-22575)
移除了 Cython 的long_t和ulong_t。
long_t和ulong_t是longlong_t和ulonglong_t的别名,令人困惑(Python 2 的遗留物)。这个更改可能导致错误:
'long_t' is not a type identifier
'ulong_t' is not a type identifier
我们建议使用比特大小类型,如cnp.int64_t或使用在 32 位系统上为 32 位,在 64 位系统上为 64 位的cnp.intp_t(这对索引最兼容)。如果需要 C long,请使用普通的long或npy_long。cnp.int_t也是long(NumPy 的默认整数)。但是,在 64 位 Windows 上,long是 32 位,我们可能会在 NumPy 中进行调整(如果您对此感到好奇,请随时联系 NumPy 开发人员)。
(gh-22637)
更改了ufunc的错误消息和axes参数的类型。
当将错误的axes值传递给ufunc(..., axes=[...])时,错误消息和类型已更改。现在的消息更能指示问题,如果值不匹配,则会引发AxisError。对于无效的输入类型仍会引发TypeError。
(gh-22675)
如果作为where使用的 Array-like 定义了__array_ufunc__,现在可以覆盖 ufunc。
如果numpy.ufunc的where关键字参数是numpy.ndarray的子类或者是定义了numpy.class.__array_ufunc__的鸭子类型,它可以通过与输入和输出参数相同的机制覆盖 ufunc 的行为。请注意,为了使其正常工作,where.__array_ufunc__的实现将必须解开where参数以将其传递给ufunc的默认实现,或者在使用super().__array_ufunc__之前解开numpy.ndarray子类。
(gh-23240)
编译针对 NumPy C API 现在默认向后兼容
NumPy 现在默认公开 C-API 的向后兼容子集。这使得使用oldest-supported-numpy变得不必要。库可以覆盖默认的最小版本以与使用兼容:
#define NPY_TARGET_VERSION NPY_1_22_API_VERSION
在包含 NumPy 之前或通过向编译器传递等效的-D选项之前。NumPy 1.25 的默认值是NPY_1_19_API_VERSION。因为 NumPy 1.19 C API 与 NumPy 1.16 相同,因此生成的程序将与 NumPy 1.16 兼容(从 C-API 的角度看)。这个默认值将在未来的非 bug 修复版本中增加。您仍然可以针对较旧的 NumPy 版本进行编译并在更新的版本上运行。
更多详细信息请参见对于下游包作者。
(gh-23528)
新功能
np.einsum现在接受具有object dtype 的数组
代码路径将在对象 dtype 数组上调用 python 运算符,就像np.dot和np.matmul一样。
(gh-18053)
添加对原地矩阵乘法的支持
现在可以通过@=运算符执行原地矩阵乘法。
>>> import numpy as np
>>> a = np.arange(6).reshape(3, 2)
>>> print(a)
[[0 1]
[2 3]
[4 5]]
>>> b = np.ones((2, 2), dtype=int)
>>> a @= b
>>> print(a)
[[1 1]
[5 5]
[9 9]]
(gh-21120)
添加了NPY_ENABLE_CPU_FEATURES环境变量
用户现在可以通过指定NPY_ENABLE_CPU_FEATURES环境变量在运行时选择仅启用内置 CPU 功能的子集。请注意,这些指定的功能必须在基线之外,因为这些功能总是被假定。如果尝试启用 CPU 不支持的功能,或者 NumPy 未构建的功能,将引发错误。
(gh-22137)
NumPy 现在有一个np.exceptions命名空间
NumPy 现在有一个专用的命名空间,使大多数异常和警告可用。所有这些仍然在主命名空间中可用,尽管一些可能会在未来慢慢移动。这样做的主要原因是增加可发现性并添加未来的异常。
(gh-22644)
np.linalg函数返回 NamedTuples
返回元组的np.linalg函数现在返回 namedtuples。这些函数包括eig()、eigh()、qr()、slogdet()和svd()。在这些函数返回非元组的情况下,返回类型不变,例如带有某些关键字参数的svd(compute_uv=False)。
(gh-22786)
np.char中的字符串函数与 NEP 42 自定义 dtype 兼容
可以将代表 unicode 字符串或字节字符串的自定义 dtype 传递给np.char中的字符串函数。
(gh-22863)
可以从字符串抽象 dtype 类创建字符串 dtype 实例
现在可以创建一个具有大小的字符串 dtype 实例,而不使用 dtype 的字符串名称。例如,type(np.dtype('U'))(8)将创建一个等同于np.dtype('U8')的 dtype。在编写处理字符串 dtype 类的通用代码时,此功能最为有用。
(gh-22963)
富士通 C/C++编译器现在受支持
添加了对富士通编译器的支持。要使用富士通编译器构建,请运行:
python setup.py build -c fujitsu
现在支持 SSL2
添加了对 SSL2 的支持。SSL2 是一个提供 OpenBLAS 兼容 GEMM 函数的库。要启用 SSL2,需要编辑 site.cfg 并使用富士通编译器构建。参见 site.cfg.example。
(gh-22982)
np.einsum现在接受具有object dtype 的数组
代码路径将在对象 dtype 数组上调用 python 运算符,类似于np.dot和np.matmul。
(gh-18053)
添加对原地矩阵乘法的支持
现在可以通过@=运算符执行原地矩阵乘法。
>>> import numpy as np
>>> a = np.arange(6).reshape(3, 2)
>>> print(a)
[[0 1]
[2 3]
[4 5]]
>>> b = np.ones((2, 2), dtype=int)
>>> a @= b
>>> print(a)
[[1 1]
[5 5]
[9 9]]
(gh-21120)
添加了NPY_ENABLE_CPU_FEATURES环境变量
用户现在可以通过指定NPY_ENABLE_CPU_FEATURES环境变量在运行时仅启用内置 CPU 功能的子集。请注意,这些指定的功能必须在基线之外,因为基线始终被假定。如果尝试启用不受 CPU 支持的功能,或者 NumPy 未构建的功能,则会引发错误。
(gh-22137)
NumPy 现在有一个np.exceptions命名空间
NumPy 现在有一个专用的命名空间,使大多数异常和警告可用。所有这些仍然在主命名空间中可用,尽管一些可能会在将来慢慢移动。这样做的主要原因是增加可发现性并添加未来的异常。
(gh-22644)
np.linalg函数返回命名元组
np.linalg函数现在返回命名元组。这些函数包括eig()、eigh()、qr()、slogdet()和svd()。在这些函数返回非元组的实例中,返回类型在某些关键字参数下保持不变(比如svd(compute_uv=False))。
(gh-22786)
np.char中的字符串函数与 NEP 42 自定义 dtype 兼容
现在可以将表示 Unicode 字符串或字节字符串的自定义 dtype 传递给np.char中的字符串函数。
(gh-22863)
可以从字符串抽象 dtype 类创建字符串 dtype 实例
现在可以创建具有大小的字符串 dtype 实例,而无需使用 dtype 的字符串名称。例如,type(np.dtype('U'))(8)将创建一个等效于np.dtype('U8')的 dtype。在处理字符串 dtype 类的通用代码时,此功能最有用。
(gh-22963)
现在支持富士通 C/C++编译器
添加了对富士通编译器的支持。要使用富士通编译器构建,请运行:
python setup.py build -c fujitsu
现在支持 SSL2
添加了对 SSL2 的支持。SSL2 是一个提供 OpenBLAS 兼容 GEMM 函数的库。要启用 SSL2,需要编辑 site.cfg 并使用富士通编译器构建。请参阅 site.cfg.example。
(gh-22982)
改进
NDArrayOperatorsMixin指定没有__slots__
NDArrayOperatorsMixin类现在指定不包含__slots__,确保子类现在可以在 Python 中使用此功能。
(gh-23113)
修复复数零的幂
np.power现在为复数返回不同的结果0^{non-zero}。请注意,该值仅在指数的实部大于零时定义。以前,除非虚部严格为零,否则返回 NaN。返回值为0+0j或0-0j。
(gh-18535)
新增 DTypePromotionError
NumPy 现在有一个新的DTypePromotionError,当两个 dtype 无法提升为一个公共 dtype 时使用,例如:
np.result_type("M8[s]", np.complex128)
引发这个新异常。
(gh-22707)
np.show_config使用来自 Meson 的信息
构建和系统信息现在包含来自 Meson 的信息。np.show_config现在有一个新的可选参数mode,以帮助自定义输出。
(gh-22769)
修复np.ma.diff在带有 prepend/append 参数调用时未保留掩码。
调用np.ma.diff时带有 prepend 和/或 append 参数现在返回一个保留输入掩码的MaskedArray。
以前,返回的MaskedArray没有掩码。
(gh-22776)
修正了 Cython 中 NumPy C-API 的错误处理
许多为在 Cython 中使用而定义的 NumPy C 函数缺乏正确的错误指示符,如except -1或except *。现在已添加。
(gh-22997)
能够直接生成随机数生成器
numpy.random.Generator.spawn现在允许通过numpy.random.SeedSequence.spawn机制直接生成新的独立子生成器。numpy.random.BitGenerator.spawn对底层比特生成器执行相同操作。
另外,numpy.random.BitGenerator.seed_seq现在直接提供用于初始化比特生成器的种子序列的访问。这允许例如:
seed = 0x2e09b90939db40c400f8f22dae617151
rng = np.random.default_rng(seed)
child_rng1, child_rng2 = rng.spawn(2)
# safely use rng, child_rng1, and child_rng2
以前,这是很难做到的,没有明确传递SeedSequence。请参阅numpy.random.SeedSequence获取更多信息。
(gh-23195)
numpy.logspace现在支持非标量base参数
numpy.logspace的base参数现在可以是类似数组,如果可以与start��stop参数进行广播。
(gh-23275)
np.ma.dot()现在支持非 2d 数组
以前np.ma.dot()只在a和b都是 2d 时有效。现在它也适用于非 2d 数组,就像np.dot()一样。
(gh-23322)
明确在 repr 中显示.npz 文件的键
打印NpzFile时显示加载的.npz 文件的键。
>>> npzfile = np.load('arr.npz')
>>> npzfile
NpzFile 'arr.npz' with keys arr_0, arr_1, arr_2, arr_3, arr_4...
(gh-23357)
NumPy 现在在np.dtypes中公开了 DType 类
新的numpy.dtypes模块现在公开了 DType 类,并将包含未来与 dtype 相关的功能。大多数用户不需要直接使用这些类。
(gh-23358)
在保存为.npy或.npz文件之前,删除 dtype 元数据
目前,包含具有元数据的 dtype 表的*.npy文件无法读取。现在,在保存之前,np.save和np.savez会删除元数据。
(gh-23371)
numpy.lib.recfunctions.structured_to_unstructured在更多情况下返回视图
structured_to_unstructured现在返回一个视图,如果字段之间的步幅是恒定的。以前,字段之间的填充或反转字段会导致复制。此更改仅适用于ndarray、memmap和recarray。对于所有其他数组子类,行为保持不变。
(gh-23652)
有符号和无符号整数始终正确比较
当在 NumPy 中混合使用uint64和int64时,NumPy 通常将两者都提升为float64。这种行为可能会引起争议,但对于比较==、<=来说很令人困惑,因为返回的结果可能是不正确的,但转换被隐藏,因为结果是布尔值。现在,NumPy 将避免转换为浮点数,以便为这些情况返回正确的结果。
(gh-23713)
NDArrayOperatorsMixin指定它没有__slots__
NDArrayOperatorsMixin类现在指定它不包含__slots__,确保子类现在可以在 Python 中使用此功能。
(gh-23113)
修复复零的幂
np.power现在对于复数的0^{non-zero}返回不同的结果。请注意,只有当指数的实部大于零时,该值才被定义。以前,除非虚部严格为零,否则返回 NaN。返回值为0+0j或0-0j。
(gh-18535)
新的DTypePromotionError
NumPy 现在有一个新的DTypePromotionError,当两个 dtype 无法提升为一个公共 dtype 时使用,例如:
np.result_type("M8[s]", np.complex128)
引发这���新异常。
(gh-22707)
np.show_config使用来自 Meson 的信息
构建和系统信息现在包含来自 Meson 的信息。np.show_config现在有一个新的可选参数mode,以帮助自定义输出。
(gh-22769)
修复np.ma.diff在调用时不保留掩码的问题,当使用参数 prepend/append 时。
使用参数 prepend 和/或 append 调用np.ma.diff现在返回一个保留输入掩码的MaskedArray。
以前,返回没有掩码的MaskedArray。
(gh-22776)
修正了 Cython 中 NumPy C-API 的错误处理
许多为在 Cython 中使用而定义的 NumPy C 函数缺乏正确的错误指示符,如 except -1 或 except *。现在已经添加了这些。
(gh-22997)
直接生成随机数生成器的能力
numpy.random.Generator.spawn 现在允许通过 numpy.random.SeedSequence.spawn 机制直接生成新的独立子生成器。numpy.random.BitGenerator.spawn 对底层位生成器执行相同操作。
此外,numpy.random.BitGenerator.seed_seq 现在直接提供用于初始化位生成器的种子序列的访问权限。例如,这允许:
seed = 0x2e09b90939db40c400f8f22dae617151
rng = np.random.default_rng(seed)
child_rng1, child_rng2 = rng.spawn(2)
# safely use rng, child_rng1, and child_rng2
以前,这是很难做到的,没有显式传递 SeedSequence。请参阅 numpy.random.SeedSequence 了解更多信息。
(gh-23195)
numpy.logspace 现在支持非标量 base 参数
numpy.logspace 的 base 参数现在可以是类似数组,如果它可以与 start 和 stop 参数进行广播。
(gh-23275)
np.ma.dot() 现在支持非 2d 数组
以前,np.ma.dot() 只能在 a 和 b 都是 2d 的情况下工作。现在它也适用于非 2d 数组,就像 np.dot() 一样。
(gh-23322)
显式显示 .npz 文件的键��� repr 中
NpzFile 在打印时显示加载的 .npz 文件的键。
>>> npzfile = np.load('arr.npz')
>>> npzfile
NpzFile 'arr.npz' with keys arr_0, arr_1, arr_2, arr_3, arr_4...
(gh-23357)
NumPy 现在在 np.dtypes 中公开了 DType 类。
新的 numpy.dtypes 模块现在公开了 DType 类,并将包含未来与 dtype 相关的功能。大多数用户不需要直接使用这些类。
(gh-23358)
在保存为 .npy 或 .npz 文件之前删除 dtype 元数据
目前,包含具有元数据的 dtype 的表的 *.npy 文件无法读取。现在,np.save 和 np.savez 在保存之前删除元数据。
(gh-23371)
numpy.lib.recfunctions.structured_to_unstructured 在更多情况下返回视图
structured_to_unstructured现在如果字段之间的步幅是恒定的,则返回一个视图。以前,字段之间的填充或反转字段会导致复制。此更改仅适用于ndarray、memmap和recarray。对于所有其他数组子类,行为保持不变。
(gh-23652)
有符号和无符号整数始终正确比较
当 NumPy 中混合使用uint64和int64时,NumPy 通常会将两者都提升为float64。这种行为可能会引起争议,但对于比较==、<=来说很令人困惑,因为返回的结果可能是不正确的,但转换是隐藏的,因为结果是布尔值。现在 NumPy 将通过避免转换为浮点数来返回这些正确的结果。
(gh-23713)
性能改进和变化
在 AVX-512 启用处理器上更快的np.argsort
32 位和 64 位快速排序算法对支持 AVX-512 指令集的处理器获得高���6 倍的加速。
感谢英特尔公司赞助此工作。
(gh-23707)
在 AVX-512 启用处理器上更快的np.sort
16 位和 64 位数据类型的快速排序获得高达 15 倍和 9 倍的加速,对支持 AVX-512 指令集的处理器。
感谢英特尔公司赞助此工作。
(gh-22315)
__array_function__机制现在更快
现在 NumPy 中大多数函数的开销更小,特别是在使用关键字参数时。这个改变显著加快了许多简单函数调用的速度。
(gh-23020)
ufunc.at可以更快
通用ufunc.at可以快达到 9 倍。加速的条件:
-
操作数对齐
-
无强制转换
如果 ufunc 在具有上述条件的 1d 参数上具有适当的索引循环,ufunc.at可以快达到 60 倍(额外 7 倍加速)。已将适当的索引循环添加到add、subtract、multiply、floor_divide、maximum、minimum、fmax和fmin中。
内部逻辑类似于常规 ufunc 使用的逻辑,也有快速路径。
感谢D. E. Shaw 集团赞助此工作。
(gh-23136)
在NpzFile上更快的成员测试
在NpzFile上的成员测试如果成功将不再解压存档。
(gh-23661)
在 AVX-512 启用处理器上更快的np.argsort
32 位和 64 位快速排序算法对支持 AVX-512 指令集的处理器获得高达 6 倍的加速。
感谢英特尔公司赞助此工作。
(gh-23707)
AVX-512 启用处理器上更快的np.sort
16 位和 64 位数据类型的快速排序在支持 AVX-512 指令集的处理器上提高了 15 倍和 9 倍的速度。
感谢英特尔公司赞助此工作。
(gh-22315)
__array_function__机制现在更快
现在 NumPy 中大多数函数的开销更小,特别是在使用关键字参数时。这一变化显著加快了许多简单函数调用的速度。
(gh-23020)
ufunc.at可以更快
通用ufunc.at可以快 9 倍。此加速的条件:
-
操作数已对齐
-
无需转换
如果在满足上述条件的 1d 参数上具有适当索引循环的 ufunc,ufunc.at可以快 60 倍(额外提速 7 倍)。已将适当的索引循环添加到add、subtract、multiply、floor_divide、maximum、minimum、fmax和fmin。
内部逻辑类似于常规 ufunc 使用的逻辑,也有快速路径。
感谢D. E. Shaw 集团赞助此工作。
(gh-23136)
在NpzFile上更快的成员测试
在NpzFile上的成员测试如果成功将不再解压存档。
(gh-23661)
变更
np.r_[]和np.c_[]与特定标量值
在罕见情况下,主要使用np.r_与标量可能导致不同的结果。主要潜在变化如下所示:
>>> np.r_[np.arange(5, dtype=np.uint8), -1].dtype
int16 # rather than the default integer (int64 or int32)
>>> np.r_[np.arange(5, dtype=np.int8), 255]
array([ 0, 1, 2, 3, 4, 255], dtype=int16)
第二个示例返回:
array([ 0, 1, 2, 3, 4, -1], dtype=int8)
第一个是由于带有无符号整数数组的有符号整数标量,而第二个是由于255无法容纳在int8中,NumPy 目前正在检查值以使其正常工作。(请注意,由于NEP 50; 未来预计第二个示例将发生变化,然后会引发错误。)
(gh-22539)
大多数 NumPy 函数都被封装为可调用的 C 函数
为加快__array_function__分派,现在大多数 NumPy 函数都被封装为 C 可调用函数,而不是正确的 Python 函数或 C 方法。它们看起来和感觉仍然与以前一样(像 Python 函数),这只会提高性能和用户体验(更清晰的回溯)。但是,如果此更改因某种原因使您的程序混淆,请通知 NumPy 开发人员。
(gh-23020)
C++标准库使用
现在 NumPy 构建依赖于 C++标准库,因为numpy.core._multiarray_umath扩展与 C++链接器链接。
(gh-23601)
np.r_[]和np.c_[]与特定标量值
在罕见情况下,主要使用np.r_与标量可能导致不同的结果。主要潜在变化如下所示:
>>> np.r_[np.arange(5, dtype=np.uint8), -1].dtype
int16 # rather than the default integer (int64 or int32)
>>> np.r_[np.arange(5, dtype=np.int8), 255]
array([ 0, 1, 2, 3, 4, 255], dtype=int16)
第二个示例返回:
array([ 0, 1, 2, 3, 4, -1], dtype=int8)
第一个是由于带有无符号整数数组的有符号整数标量,而第二个是由于 255 无法容纳在 int8 中,而 NumPy 目前正在检查值以使其工作。(请注意,由于 NEP 50, 第二个示例预计将来会发生变化;然后会引发错误。)
(gh-22539)
大多数 NumPy 函数都被包装成可调用的 C 函数
为了加快 __array_function__ 的分发,大多数 NumPy 函数现在被包装成 C 可调用函数,而不是正确的 Python 函数或 C 方法。它们看起来和感觉仍然与以前一样(像一个 Python 函数),这只会提高性能和用户体验(更清晰的回溯)。然而,如果这种变化因某种原因使您的程序混淆,请通知 NumPy 开发人员。
(gh-23020)
C++ 标准库的使用
现在 NumPy 构建依赖于 C++ 标准库,因为 numpy.core._multiarray_umath 扩展与 C++ 链接器链接。
(gh-23601)


浙公网安备 33010602011771号