NumPy-1-26-中文文档-三十-
NumPy 1.26 中文文档(三十)
NumPy 1.6.1 发布说明
这是 1.6.x 系列的纯粹修复 bug 版本。
修复的问题
-
1834: 特定形状下 einsum 失败
-
1837: 特定数组形状下 einsum 报 nan 错误或导致 Python 卡死
-
1838: 对象<->结构化类型数组的回归
-
1851: 1.6.0 版本基于 SWIG 的代码回归
-
1863: 在使用 astype() 复制数组时产生错误结果
-
1870: 修复对象数组赋值的极端情况
-
1843: Py3k: 修复 recarray 的错误
-
1885: nditer: 检测双重约简循环错误
-
1874: f2py: 修复--include_paths bug
-
1749: 修复 ctypes.load_library()
-
1895/1896: iter: 写入操作数未始终正确缓冲
修复的问题
-
1834: 特定形状下 einsum 失败
-
1837: 特定数组形状下 einsum 报 nan 错误或导致 Python 卡死
-
1838: 对象<->结构化类型数组的回归
-
1851: 1.6.0 版本基于 SWIG 的代码回归
-
1863: 在使用 astype() 复制数组时产生错误结果
-
1870: 修复对象数组赋值的极端情况
-
1843: Py3k: 修复 recarray 的错误
-
1885: nditer: 检测双重约简循环错误
-
1874: f2py: 修复--include_paths bug
-
1749: 修复 ctypes.load_library()
-
1895/1896: iter: 写入操作数未始终正确缓冲
NumPy 1.6.0 发行说明
此版本包括多个新功能,以及 numerous bug 修复和改进的文档。它向后兼容 1.5.0 版本,并支持 Python 2.4 - 2.7 和 3.1 - 3.2。
亮点
-
重新引入了日期时间数据类型支持,以处理数组中的日期。
-
新的 16 位浮点类型
-
一个新的迭代器,可以提高许多函数的性能。
新功能
新的 16 位浮点类型
此版本增加了对 IEEE 754-2008 二进制 16 格式的支持,可用作数据类型 numpy.half
。在 Python 中,此类型的行为类似于 float 或 double,并且 C 扩展可以通过公开的半浮点 API 添加对其的支持。
新的迭代器
已添加一个新的迭代器,用单个对象和 API 替换现有迭代器和多迭代器的功能。此迭代器可以很好地处理不同于 C 或 Fortran 连续的通用内存布局,并处理标准 NumPy 和自定义广播。由 ufuncs 提供的缓冲,自动数据类型转换和可选输出参数,虽然难以在其他地方复制,但现在可以通过此迭代器来使用。
Legendre, Laguerre, Hermite, HermiteE 多项式在 numpy.polynomial
中
扩展了多项式包中可用的多项式的数量。此外,已添加了新的 window
属性到类中,以指定 domain
映射到的范围。这对 Legendre、Laguerre 和 HermiteE 多项式特别有用,它们的自然域是无限的,并提供了一种更直观的方式来获取正确的值映射,而不用在域上施加不自然的技巧。
在 numpy.f2py
中增加了对 Fortran 假定形状数组和大小函数的支持
F2py 现在支持包装使用假定形状数组的 Fortran 90 例程。以前,这种例程可以从 Python 调用,但相应的 Fortran 例程接收到的假定形状数组为空数组,导致了不可预测的结果。感谢 Lorenz Hüdepohl 指出了正确的接口例程与假定形状数组交互的方法。
此外,f2py 现在支持自动包装使用两个参数 size
函数的 Fortran 例程在维度规范中。
其他新函数
numpy.ravel_multi_index
: 将多索引元组转换为扁平索引数组,应用边界模式到索引。
numpy.einsum
: 评估爱因斯坦求和约定。使用爱因斯坦求和约定,许多常见的多维数组操作可以以简单的方式表示。此函数提供了计算这样的求和的方法。
numpy.count_nonzero
: 计算数组中非零元素的数量。
numpy.result_type
和numpy.min_scalar_type
:这些函数暴露了 ufuncs 和其他操作使用的底层类型提升,用于确定输出类型。这些函数改进了numpy.common_type
和numpy.mintypecode
,它们提供了类似的功能,但与 ufunc 实现不匹配。
更改
默认错误处理
默认错误处理已从print
更改为对所有情况的warn
,除了underflow
仍然是ignore
。
numpy.distutils
支持构建 Numpy 的多个新编译器:OS X 上的 Portland Group Fortran 编译器、PathScale 编译器套件和 Linux 上的 64 位 Intel C 编译器。
numpy.testing
测试框架增加了numpy.testing.assert_allclose
,提供了比assert_almost_equal、assert_approx_equal和assert_array_almost_equal更方便的比较浮点数组的方式。
C API
除了新迭代器和半数据类型的 API 之外,C API 还做了许多其他增加。ufunc 使用的类型提升机制通过PyArray_PromoteTypes
、PyArray_ResultType
和PyArray_MinScalarType
暴露出来。添加了一个新的枚举NPY_CASTING
,用于控制允许的类型转换类型。这由新函数PyArray_CanCastArrayTo
和PyArray_CanCastTypeTo
使用。通过PyArray_GetArrayParamsFromObject
暴露了一种更灵活地将任意 Python 对象转换为数组的方法。
废弃的特性
numpy.histogram
中的“normed”关键字已被废弃。其功能将由新的“density”关键字替代。
移除的特性
numpy.fft
已移除了refft、refft2、refftn、irefft、irefft2、irefftn这些函数,它们是不带有名称中的‘e’的相同函数的别名。
numpy.memmap
memmap 的sync()和close()方法已被移除。改用flush()和“del memmap”。
numpy.lib
删除了废弃的函数numpy.unique1d
,numpy.setmember1d
,numpy.intersect1d_nu
和numpy.lib.ufunclike.log2
。
numpy.ma
从numpy.ma
模块中删除了几个已弃用的项目:
* ``numpy.ma.MaskedArray`` "raw_data" method
* ``numpy.ma.MaskedArray`` constructor "flag" keyword
* ``numpy.ma.make_mask`` "flag" keyword
* ``numpy.ma.allclose`` "fill_value" keyword
numpy.distutils
移除了numpy.get_numpy_include
函数,改用numpy.get_include
。
亮点
-
重新引入了 datetime dtype 的支持来处理数组中的日期。
-
新的 16 位浮点类型。
-
新的迭代器,提高了许多函数的性能。
新功能
新的 16 位浮点类型
此版本增加了对 IEEE 754-2008 二进制 16 位格式的支持,可用作数据类型numpy.half
。在 Python 中,该类型的行为类似于float或double,并且 C 扩展可以使用公开的半浮点 API 来支持它。
新的迭代器
添加了新的迭代器,用单个对象和 API 取代现有迭代器和多迭代器的功能。这个迭代器可以很好地处理与 C 或 Fortran 紧密不相同的一般内存布局,并且处理标准 NumPy 和定制广播。 ufuncs 提供的缓冲、自动数据类型转换和可选输出参数,现在通过这个迭代器暴露出来,这些功能在其他地方很难复制。
numpy.polynomial
中的 Legendre、Laguerre、Hermite 和 HermiteE 多项式
扩展了多项式包中可用的多项式数量。此外,为了指定domain
映射到的范围,已向类添加了新的window
属性。这在很大程度上对 Laguerre、Hermite 和 HermiteE 多项式特别有用,因为它们的自然域是无限的,并提供了更直观的方法来获得正确的值映射,而不用在域上玩弄不自然的技巧。
Fortran 假定形状数组和numpy.f2py
中的 size 函数支持
F2py 现在支持封装使用假定形状数组的 Fortran 90 例程。在此之前,这样的例程可以从 Python 中调用,但相应的 Fortran 例程接收的是假定形状数组作为零长度数组,这会导致不可预测的结果。感谢 Lorenz Hüdepohl 指出了与假定形状数组接口化例程的正确方法。
此外,f2py 现在支持自动封装在维度规范中使用两个参数size
函数的 Fortran 例程。
其他新功能
numpy.ravel_multi_index
:将多索引元组转换为扁平索引数组,同时将边界模式应用于索引。
numpy.einsum
:评估爱因斯坦求和约定。使用爱因斯坦求和约定,许多常见的多维数组操作可以用简洁的方式表示。此功能提供了一种计算这样的求和的方法。
numpy.count_nonzero
:计算数组中非零元素的数量。
numpy.result_type
和numpy.min_scalar_type
:这些函数暴露了 ufunc 和其他操作使用的底层类型提升,以确定输出类型。这些函数改进了numpy.common_type
和numpy.mintypecode
,它们提供了类似的功能,但与 ufunc 实现不匹配。
新的 16 位浮点类型
此版本添加了对 IEEE 754-2008 二进制 16 格式的支持,作为数据类型numpy.half
可用。在 Python 中,该类型的行为类似于float或double,并且 C 扩展可以通过暴露的半浮点 API 为其添加支持。
新的迭代器
已添加新的迭代器,替代了现有迭代器和多迭代器的功能,使用单个对象和 API。这个迭代器适用于一般的内存布局,不同于 C 或 Fortran 连续,并处理标准的 NumPy 和自定义广播。这个迭代器现在公开了缓冲、自动数据类型转换和可选的输出参数,这些是 ufuncs 提供的但其他地方难以复制的功能。
在 numpy.polynomial
中的 Legendre、Laguerre、Hermite 和 HermiteE 多项式
扩展了多项式包中可用的多项式数量。此外,新添加了一个 window
属性到类中,用于指定 domain
映射的范围。这对于 Laguerre、Hermite 和 HermiteE 多项式特别有用,它们的自然域是无限的,提供了一个更直观的方法来获取正确的值映射,而不必用域进行不自然的处理。
在 numpy.f2py
中支持 Fortran 假定形状数组和 size 函数。
F2py 现在支持包装使用假定形状数组的 Fortran 90 例程。之前这样的例程可以从 Python 中调用,但相应的 Fortran 例程接收到的假定形状数组作为零长度数组,这会导致不可预测的结果。感谢 Lorenz Hüdepohl 指出了与假定形状数组接口例程的正确方式。
此外,f2py 现在支持自动包装使用两个参数 size
函数在维度规范中的 Fortran 例程。
其他新功能
numpy.ravel_multi_index
:将多索引元组转换为一维索引数组,应用边界模式到索引。
numpy.einsum
:求解爱因斯坦求和约定。使用爱因斯坦求和约定,许多常见的多维数组操作可以以简单的方式表示。这个函数提供了一种计算这样的求和的方法。
numpy.count_nonzero
:计算数组中非零元素的个数。
numpy.result_type
和 numpy.min_scalar_type
:这些函数公开了用于决定输出类型的类型提升,ufuncs 和其他操作使用这些提升。这些函数优于 numpy.common_type
和 numpy.mintypecode
,它们提供了类似的功能,但与 ufunc 实现不匹配。
变更
默认错误处理
默认错误处理已从 print
更改为 warn
,除了 underflow
仍然是 ignore
。
numpy.distutils
支持使用多个新编译器构建 Numpy:在 OS X 上的 Portland Group Fortran 编译器,PathScale 编译套件以及在 Linux 上的 64 位 Intel C 编译器。
numpy.testing
测试框架增加了 numpy.testing.assert_allclose
,比 assert_almost_equal、assert_approx_equal 和 assert_array_almost_equal 更方便地比较浮点数组的方法。
C API
除了对于新迭代器和半数据类型的 API 之外,C API 还增加了一些其他的功能。ufuncs 所使用的类型提升机制可通过PyArray_PromoteTypes
,PyArray_ResultType
和PyArray_MinScalarType
来访问。还新增了一个控制允许哪些类型转换的枚举NPY_CASTING
。新的函数PyArray_CanCastArrayTo
和PyArray_CanCastTypeTo
会使用这个枚举。通过PyArray_GetArrayParamsFromObject
还增加了一种更灵活的处理任意 Python 对象转换为数组的方式。
默认错误处理方式
所有除了underflow
之外,默认错误处理方式已经从print
变更为warn
。
numpy.distutils
新增了对于构建 Numpy 的几种新编译器的支持:OS X 上的 Portland Group Fortran 编译器,PathScale 编译器套件和 Linux 上的 64 位 Intel C 编译器。
numpy.testing
测试框架增加了numpy.testing.assert_allclose
,提供了比assert_almost_equal,assert_approx_equal和assert_array_almost_equal更方便的比较浮点数组的方法。
C API
除了对于新迭代器和半数据类型的 API 之外,C API 还增加了一些其他的功能。ufuncs 所使用的类型提升机制可通过PyArray_PromoteTypes
,PyArray_ResultType
和PyArray_MinScalarType
来访问。还新增了一个控制允许哪些类型转换的枚举NPY_CASTING
。新的函数PyArray_CanCastArrayTo
和PyArray_CanCastTypeTo
会使用这个枚举。通过PyArray_GetArrayParamsFromObject
还增加了一种更灵活的处理任意 Python 对象转换为数组的方式。
弃用的功能
numpy.histogram
中的“normed”关键字已被弃用。它的功能将由新的“density”关键字来代替。
移除的功能
numpy.fft
函数refft,refft2,refftn,irefft,irefft2,irefftn,它们是同名函数的别名,名称中不带‘e’,已经被删除。
numpy.memmap
memmap 的sync()和close()方法已被移除。使用flush()和“del memmap”代替。
numpy.lib
移除了弃用的函数numpy.unique1d
,numpy.setmember1d
,numpy.intersect1d_nu
和numpy.lib.ufunclike.log2
。
numpy.ma
numpy.ma
模块中移除了一些弃用的项:
* ``numpy.ma.MaskedArray`` "raw_data" method
* ``numpy.ma.MaskedArray`` constructor "flag" keyword
* ``numpy.ma.make_mask`` "flag" keyword
* ``numpy.ma.allclose`` "fill_value" keyword
numpy.distutils
移除了函数refft,refft2,refftn,irefft,irefft2,irefftn,它们是同名函数的别名,名称中不带‘e’。
numpy.fft
移除了函数refft,refft2,refftn,irefft,irefft2,irefftn,它们是同名函数的别名,名称中不带‘e’。
numpy.memmap
memmap 的sync()和close()方法已被移除。使用flush()和“del memmap”代替。
numpy.lib
移除了弃用的函数numpy.unique1d
,numpy.setmember1d
,numpy.intersect1d_nu
和numpy.lib.ufunclike.log2
。
numpy.ma
numpy.ma
模块中移除了一些弃用的项:
* ``numpy.ma.MaskedArray`` "raw_data" method
* ``numpy.ma.MaskedArray`` constructor "flag" keyword
* ``numpy.ma.make_mask`` "flag" keyword
* ``numpy.ma.allclose`` "fill_value" keyword
numpy.distutils
函数numpy.get_numpy_include
已移除,请使用numpy.get_include
代替。
NumPy 1.5.0 版本发布说明
亮点
Python 3 兼容性
这是与 Python 3 兼容的第一个 NumPy 发布版。对于 Python 3 和 Python 2 的支持是通过单一的代码库完成的。关于变更的详细说明可以在web.archive.org/web/20100814160313/http://projects.scipy.org/numpy/browser/trunk/doc/Py3K.txt
找到。
注意,Numpy 的测试框架依赖于 nose,nose 目前还没有兼容 Python 3 的发布版本。可以在web.archive.org/web/20100817112505/http://bitbucket.org/jpellerin/nose3/
找到适用于 Python 3 的工作分支。
SciPy 的移植到 Python 3 预计很快就会完成。
PEP 3118兼容性
在这个版本的 Numpy 中完全支持由 PEP 3118 描述的新缓冲区协议。在 Python 版本 >= 2.6 中,Numpy 数组暴露了缓冲区接口,并且 array()、asarray()和其他函数可以接受新式缓冲区作为输入。
新特性
复杂数转换成实数的警告
当将复数转换为实数时,Numpy 现在会发出numpy.ComplexWarning
。例如:
>>> x = np.array([1,2,3])
>>> x[:2] = np.array([1+2j, 1-2j])
ComplexWarning: Casting complex values to real discards the imaginary part
这个强制转换会丢弃虚部,这在所有情况下可能并不是预期的行为,因此会发出警告。这个警告可以通过标准方法关闭:
>>> import warnings
>>> warnings.simplefilter("ignore", np.ComplexWarning)
ndarrays 的 Dot 方法
ndarrays 现在也有点积的方法,可以以链式的方式书写矩阵乘积,如下所示:
>>> a.dot(b).dot(c)
而不是更长的替代方式
>>> np.dot(a, np.dot(b, c))
linalg.slogdet 函数
slogdet 函数返回矩阵的行列式的符号和对数。由于行列式可能涉及许多小/大值的乘积,因此其结果通常比简单乘法得到的结果更准确。
新的头文件
新的头文件 ndarraytypes.h 包含了 ndarrayobject.h 中不依赖于 PY_ARRAY_UNIQUE_SYMBOL 和 NO_IMPORT/_ARRAY 宏的符号。广义上来说,这些符号是类型、typedef 和枚举;数组函数调用则保留在 ndarrayobject.h 中。这样用户可以包括与数组相关的类型和枚举而不需要关注宏扩展及其副作用。
变更
多项式.polynomial
-
polyint 和 polyder 函数现在检查指定的积分或导数次数是否为非负整数。数字 0 对于这两个函数都是有效值。
-
Polynomial 类添加了一个 degree 方法。
-
Polynomial 类添加了一个 trimdeg 方法。它的操作方式与 truncate 相似,只是参数是所需结果的次数,而不是系数的数量。
-
Polynomial.fit 现在使用 None 作为拟合的默认域。默认的 Polynomial 域可以通过使用 [] 作为域值来指定。
-
在 polyfit 和 Polynomial.fit 中都可以使用权重。
-
在 Polynomial 类中添加了一个 linspace 方法以便于绘图。
-
增加了 polymulx 函数。
polynomial.chebyshev
-
现在 chebint 和 chebder 函数会检查指定的积分或导数次数是否为非负整数。这两个函数的有效值为数字 0。
-
在切比雪夫类中添加了一个 degree 方法。
-
在切比雪夫类中增加了一个 trimdeg 方法。它的操作方式与 truncate 相同,但参数是所需结果的次数,而不是系数的数量。
-
Chebyshev.fit 现在使用 None 作为拟合的默认域。默认的 Chebyshev 域可以通过使用 [] 作为域值来指定。
-
在 chebfit 和 Chebyshev.fit 中都可以使用权重。
-
在切比雪夫类中添加了一个 linspace 方法以便于绘图。
-
添加了 chebmulx 函数。
-
添加了第一和第二种切比雪夫点的函数。
直方图
经过两年的过渡期,histogram 函数的旧行为已经停用,并移除了“new”关键字。
相关
在 1.4.0 中,correlate 的旧行为已经被弃用,新行为(交叉相关的常见定义)现在是默认行为。
突出特点
Python 3 兼容性
这是第一个兼容 Python 3 的 NumPy 发布版。支持 Python 3 和 Python 2 是从一个代码库完成的。关于变化的详细说明可以在web.archive.org/web/20100814160313/http://projects.scipy.org/numpy/browser/trunk/doc/Py3K.txt
找到。
注意,Numpy 的测试框架依赖于 nose,后者还没有适用于 Python 3 的发布版。然而,可以在web.archive.org/web/20100817112505/http://bitbucket.org/jpellerin/nose3/
找到一个适用于 Python 3 的工作中的 nose 分支。
预计 SciPy 将很快完成向 Python 3 的移植。
PEP 3118 兼容性
根据 PEP 3118 描述的新缓冲区协议在该版本的 NumPy 中得到完全支持。在 Python 版本 >= 2.6 中,NumPy 数组公开了缓冲区接口,array()、asarray() 和其他函数接受新风格的缓冲区作为输入。
Python 3 兼容性
这是第一个兼容 Python 3 的 NumPy 发布版。支持 Python 3 和 Python 2 是从一个代码库完成的。关于变化的详细说明可以在web.archive.org/web/20100814160313/http://projects.scipy.org/numpy/browser/trunk/doc/Py3K.txt
找到。
注意,Numpy 测试框架依赖于 nose,但是 nose 目前还没有与 Python 3 兼容的版本。可以在web.archive.org/web/20100817112505/http://bitbucket.org/jpellerin/nose3/
找到 nose 的 Python 3 分支。
预计 SciPy 将很快完成对 Python 3 的移植工作。
PEP 3118 兼容性
PEP 3118 描述的新缓冲协议在这个版本的 Numpy 中得到了充分支持。在 Python 版本 >= 2.6 上,Numpy 数组暴露了缓冲区接口,并且 array()、asarray()和其他函数接受新风格的缓冲区作为输入。
新特性
警告:将复数转换为实数
当复数被转换为实数时,Numpy 现在会发出numpy.ComplexWarning
警告。例如:
>>> x = np.array([1,2,3])
>>> x[:2] = np.array([1+2j, 1-2j])
ComplexWarning: Casting complex values to real discards the imaginary part
实际上,转换确实丢弃了虚部,而这在某些情况下可能不是预期的行为,因此会出现警告。可以通过标准方式关闭这个警告:
>>> import warnings
>>> warnings.simplefilter("ignore", np.ComplexWarning)
数组的点乘方法
Ndarrays 现在也有了点积的方法,这允许将矩阵乘积写成如下的链式形式
>>> a.dot(b).dot(c)
而不是更长的替代方法
>>> np.dot(a, np.dot(b, c))
linalg.slogdet 函数
slogdet 函数返回矩阵的符号和对数行列式。由于行列式可能涉及许多小/大的值的乘积,所以结果通常比简单的乘法得到的结果更准确。
新的标题
新的头文件 ndarraytypes.h 包含了不依赖于 PY_ARRAY_UNIQUE_SYMBOL 和 NO_IMPORT/_ARRAY 宏的 ndarrayobject.h 中的符号。总的来说,这些符号是类型、typedefs 和枚举;数组函数调用留在了 ndarrayobject.h 中。这允许用户包含与数组相关的类型和枚举,而不需要担心宏的扩展和它们的副作用。
警告:将复数转换为实数
当复数被转换为实数时,Numpy 现在会发出 numpy.ComplexWarning
警告。例如:
>>> x = np.array([1,2,3])
>>> x[:2] = np.array([1+2j, 1-2j])
ComplexWarning: Casting complex values to real discards the imaginary part
实际上,转换确实丢弃了虚部,而这在某些情况下可能不是预期的行为,因此会出现警告。可以通过标准方式关闭这个警告:
>>> import warnings
>>> warnings.simplefilter("ignore", np.ComplexWarning)
数组的点乘方法
Ndarrays 现在也有了点积的方法,这允许将矩阵乘积写成如下的链式形式
>>> a.dot(b).dot(c)
而不是更长的替代方法
>>> np.dot(a, np.dot(b, c))
linalg.slogdet 函数
slogdet 函数返回矩阵的符号和对数行列式。由于行列式可能涉及许多小/大的值的乘积,所以结果通常比简单的乘法得到的结果更准确。
新的标题
新的头文件 ndarraytypes.h 包含了不依赖于 PY_ARRAY_UNIQUE_SYMBOL 和 NO_IMPORT/_ARRAY 宏的 ndarrayobject.h 中的符号。广义上讲,这些符号是类型、typedef 和枚举;数组函数调用留在 ndarrayobject.h 中。这允许用户包含与数组相关的类型和枚举,而无需关心宏的扩展和它们的副作用。
变更
多项式.多项式
-
polyint 和 polyder 函数现在会检查指定的积分或导数次数是否为非负整数。对于这两个函数来说,数字 0 是有效值。
-
在多项式类中添加了 degree 方法。
-
在多项式类中添加了 trimdeg 方法。它的操作类似于 truncate,除了参数是结果的期望度数,而不是系数的数量。
-
Polynomial.fit 现在使用 None 作为拟合的默认域。可以通过[]作为域值来指定默认的多项式域。
-
权重可以在 polyfit 和 Polynomial.fit 中使用
-
在多项式类中添加了 linspace 方法,以便绘图。
-
添加了 polymulx 函数。
多项式.切比雪夫
-
chebint 和 chebder 函数现在会检查指定的积分或导数次数是否为非负整数。对于这两个函数来说,数字 0 是有效值。
-
在切比雪夫类中添加了 degree 方法。
-
在切比雪夫类中添加了 trimdeg 方法。它的操作类似于 truncate,除了参数是结果的期望度数,而不是系数的数量。
-
现在 Chebyshev 拟合使用 None 作为拟合的默认域。可以通过[]作为域值来指定默认的 Chebyshev 域。
-
权重可以在 chebfit 和 Chebyshev.fit 中使用
-
在切比雪夫类中添加了 linspace 方法,以便绘图。
-
添加了 chebmulx 函数。
-
增加了第一、二类别的切比雪夫点的函数。
直方图
经过两年的过渡期后,直方图函数的旧行为已经被淘汰,而“新”关键词已被移除。
相关
相关函数的旧行为在 1.4.0 版中已被弃用,新行为(跨相关的通常定义)现在是默认行为。
多项式.多项式
-
polyint 和 polyder 函数现在会检查指定的积分或导数次数是否为非负整数。对于这两个函数来说,数字 0 是有效值。
-
在多项式类中添加了 degree 方法。
-
在多项式类中添加了 trimdeg 方法。它的操作类似于 truncate,除了参数是结果的期望度数,而不是系数的数量。
-
Polynomial.fit 现在使用 None 作为拟合的默认域。可以通过[]作为域值来指定默认的多项式域。
-
权重可以在 polyfit 和 Polynomial.fit 中使用
-
在多项式类中添加了 linspace 方法,以便绘图。
-
添加了 polymulx 函数。
polynomial.chebyshev
-
chebint 和 chebder 函数现在检查指定的积分或导数次数是否为非负整数。0 是这两个函数的有效值。
-
Chebyshev 类中新增了一个度方法。
-
Chebyshev 类中新增了一个 trimdeg 方法。它的功能类似于 truncate,但参数是期望结果的度数,而不是系数的数量。
-
Chebyshev.fit 现在默认使用 None 作为拟合的域。默认的切比雪夫域可以通过使用 [] 作为域值来指定。
-
权重可以在 chebfit 和 Chebyshev.fit 中使用。
-
Chebyshev 类中新增了一个 linspace 方法,以方便绘图。
-
添加了 chebmulx 函数。
-
添加了第一种和第二种切比雪夫点的函数。
直方图
经过两年过渡期后,直方图函数的旧行为已经被淘汰,同时“new”关键字已经被移除。
互相关
correlate 在 1.4.0 版本中的旧行为已经被弃用,新行为(通常定义为互相关)现在是默认行为。
NumPy 1.4.0 发布说明
此次小版本更新包含了众多错误修复和一些新功能。与 1.3.0 版本兼容。
亮点
-
新的日期时间 dtype 支持来处理数组中的日期
-
更快的导入时间
-
扩展了对于 ufuncs 的数组包装机制
-
新的邻域迭代器(仅限 C 级别)
-
在 npymath 中,添加了类似于 C99 的复数函数
新功能
扩展了对于 ufuncs 的数组包装机制
ndarray 添加了一个 array_prepare 方法,以便为子类提供更大的灵活性与 ufuncs 和类似 ufunc 的函数进行交互。ndarray 已经提供了 array_wrap,允许子类设置结果的数组类型并在从 ufunc 中输出时填充元数据(如在 MaskedArray 的实现中所见)。对于某些应用程序,在进行操作之前提供检查和填充元数据是必要的,即在计算结果并填充之前。因此,在 ufunc 初始化输出数组后但计算结果和填充之前调用 array_prepare。这样就可以进行检查和引发错误,以防止可能会修改数据的操作。
自动检测向前不兼容性
以前,如果一个扩展是针对 NumPy 的版本 N 构建的,并在具有 NumPy M < N 的系统上使用,那么 import_array 将会成功,这可能导致崩溃,因为版本 M 中没有 N 中的某个函数。自 NumPy 1.4.0 开始,这将导致 import_array 失败,因此错误将被及早捕获。
新的迭代器
添加了一个新的邻域迭代器到 C API 中。它可用于迭代数组邻域中的项目,并且可以自动处理边界条件。可用的填充方式包括零填充和一填充,以及任意常数值、镜像和循环填充。
新的多项式支持
添加了新的模块 chebyshev 和 polynomial。新的 polynomial 模块与 numpy 中当前的多项式支持不兼容,但与新的 chebyshev 模块非常相似。对于大多数人来说,最显著的不同之处在于系数的指数从低到高进行指定,低级函数不使用 Chebyshev 和 Polynomial 类作为参数,并且 Chebyshev 和 Polynomial 类都包含一个范围。跨域之间的映射是线性替换,这两个类可以互相转换,例如一个域中的 Chebyshev 级数可以在另一个域中展开为多项式。新类通常应该替换低级函数,后者适用于希望构建自己的类的用户。
新的模块不会自动导入到 numpy 命名空间中,必须使用 "import numpy.polynomial" 语句显式导入。
新的 C API
下列 C 函数已添加到 C API 中:
- PyArray_GetNDArrayCFeatureVersion:返回加载的 numpy 的API版本。
- PyArray_Correlate2 - 类似于 PyArray_Correlate,但实现了常规相关性的定义。 输入不会进行交换,并且对于复杂数组会进行共轭。
- PyArray_NeighborhoodIterNew:一个新的迭代器,用于在一个点的邻域上进行迭代,并处理自动边界。它在 C-API 参考的迭代器部分有详细文档,你可以在 numpy.core 的 multiarray_test.c.src 文件中找到一些示例。
新的 ufuncs
下列 ufuncs 已添加到 C API 中:
- copysign - 返回第一个参数的值,并用第二个参数的符号复制。
- nextafter - 返回第一个参数朝向第二个参数的下一个可表示的浮点值。
新定义
alpha 处理器现在已在 numpy/npy_cpu.h 中定义并可用。 已修复了对 PARISC 处理器的检测失败。 这些定义是:
- NPY_CPU_HPPA:PARISC
- NPY_CPU_ALPHA:Alpha
测试
- 弃用的装饰器:这个装饰器可用于在测试引发 DeprecationWarning 时避免混乱的测试输出。
- assert_array_almost_equal_nulp:比较两个浮点值数组的新方法。 使用此函数,如果两个值之间没有很多可表示的浮点值,那么它们被视为接近,因此在值波动很大时比 assert_array_almost_equal 更稳健。
- assert_array_max_ulp:如果两个浮点值之间有超过 N 个可表示的数字,则引发断言。
- assert_warns:如果可调用对象不生成适当类别的警告,则引发 AssertionError,而不会更改警告状态。
重用 npymath
在 1.3.0 中,我们开始将可移植的 C 数学例程放在 npymath 库中,以便人们可以使用它们来编写可移植的扩展。不幸的是,很难轻松地链接到这个库:在 1.4.0 中,numpy.distutils 增加了支持,以便第三方可以重用这个库。有关更多信息,请参阅 coremath 文档。
改进的集合操作
在 NumPy 先前版本中,一些集合函数(intersect1d,setxor1d,setdiff1d 和 setmember1d)如果输入数组包含重复项,则可能返回不正确的结果。 现在这些函数对包含重复项的输入数组能够正确工作。 setmember1d 已重命名为 in1d,因为随着接受包含重复项的数组,它不再是一个集合操作,而且在概念上类似于 Python 运算符'in'的逐元素版本。所有这些函数现在都接受布尔关键字 assume_unique。 默认情况下,这是 False,但如果已知输入数组不包含重复项,则可以将其设置为 True,这可以增加函数的执行速度。
改进
numpy 导入速度明显更快(根据平台和计算机的不同,从 20%到 30%)
现在排序函数会将 nan 排在最后。
- 真实的排序顺序是[R,nan]
- 复数排序顺序为[R + Rj, R + nanj, nan + Rj, nan + nanj]
具有相同 nan 放置的复数按照非 nan 部分排序。
类型比较函数与 nans 的新排序顺序保持一致。Searchsorted 现在可以处理包含 nan 值的排序数组。
复数除法更加抗溢出。
复杂数值的整数除法更加抗溢出。
废弃功能
以下函数已被弃用:
- 相关性:它采用一个新的关键字参数 old_behavior。当为 True(默认值)时,它返回与以前相同的结果。当为 False 时,计算传统相关性,并对复数数组取共轭。旧行为将在 NumPy 1.5 中被删除,并在 1.4 中引发 DeprecationWarning。
- unique1d:使用 unique 代替。unique1d 在 1.4 版将发出弃用警告,并将在 1.5 版中删除。
- intersect1d_nu:使用 intersect1d 代替。intersect1d_nu 在 1.4 版将发出弃用警告,并将在 1.5 版中删除。
- setmember1d:使用 in1d 代替。setmember1d 在 1.4 版将发出弃用警告,并将在 1.5 版中删除。
以下引发错误:
- 当操作 0 维数组时,
numpy.max
和其他函数仅接受axis = 0
,axis = -1
和axis = None
。使用超出边界的轴是一个错误的指示,所以 Numpy 现在对这些情况报错。- 不再允许指定
axis> MAX_DIMS
;Numpy 现在会报错,而不是对axis = None
做出类似的行为。
内部更改
在可用时使用 C99 复数函数
如果平台支持,numpy 复数类型现在保证与 C99 复数类型 ABI 兼容。此外,复数 ufunc 现在使用平台 C99 函数而不是自己的函数。
拆分 multiarray 和 umath 源代码
multiarray 和 umath 的源代码已拆分为独立的逻辑编译单元。这应该使得新手更容易阅读源代码。
单独的编译
默认情况下,multiarray(和 umath)的每个文件将合并为一个文件进行编译,但如果 NPY_SEPARATE_COMPILATION 环境变量设置为非负值,则启用每个文件的实验性单独编译。这使得在核心 numpy 上的编译/调试周期更快。
单独的核心数学库
新增了以下函数:
- npy_copysign
- npy_nextafter
- npy_cpack
- npy_creal
- npy_cimag
- npy_cabs
- npy_cexp
- npy_clog
- npy_cpow
- npy_csqr
- npy_ccos
- npy_csin
亮点
-
新的日期时间 dtype 支持,以处理数组中的日期。
-
导入时间更快
-
对 ufuncs 进行扩展数组包装机制
-
新的邻域迭代器(仅限 C 级别)
-
npymath 中类似 C99 的复数函数
新功能
对 ufuncs 进行扩展数组包装机制
ndarray 已添加了 array_prepare 方法,为子类提供与 ufunc 和类似 ufunc 函数更大的灵活性进行交互。ndarray 已提供 array_wrap,允许子类设置结果的数组类型并在 ufunc 输出时填充元数据(如在 MaskedArray 的实现中所见)。对于某些应用程序,有必要在“进入”过程中提供检查和填充元数据。因此,array_prepare 在 ufunc 初始化输出数组后但在计算结果和填充结果之前调用。通过这种方式,可以在可能修改数据的操作之前进行检查并引发错误。
自动检测向前不兼容性
以前,如果扩展程序是根据 NumPy 的版本 N 进行构建的,并且在具有 NumPy M < N 的系统上使用,import_array 将成功,这可能导致崩溃,因为版本 M 中没有版本 N 中的函数。从 NumPy 1.4.0 开始,这将导致 import_array 失败,因此错误将被及早捕获。
新的迭代器
C API 中添加了一个新的邻域迭代器。它可用于迭代数组的邻域项,并且可以自动处理边界条件。可以使用零和一填充,以及任意的常数值,镜像和循环填充。
新的多项式支持
新添加了模块 chebyshev 和 polynomial。新的 polynomial 模块与 numpy 中现有的多项式支持不兼容,但与新的 chebyshev 模块类似。对于大多数人来说,最明显的区别是系数从低到高幂次的顺序,低级函数与 Chebyshev 和 Polynomial 类作为参数不起作用,并且 Chebyshev 和 Polynomial 类包含一个定义域。域之间的映射是线性替换,两个类可以互相转换,例如,在一个域中的 Chebyshev 系列可以在另一个域中展开为多项式。新的类应该通常用于替代低级函数,后者提供给那些希望构建自己类的人使用。
新的模块不会自动导入 numpy 命名空间,必须使用“import numpy.polynomial”语句显式引入它们。
新的 C API
已向 C API 添加了以下 C 函数:
- PyArray_GetNDArrayCFeatureVersion:返回加载的 numpy 的API版本。
- PyArray_Correlate2 - 类似于 PyArray_Correlate,但实现了经典的相关性定义。输入未进行交换,并且对于复数数组,进行共轭操作。
- PyArray_NeighborhoodIterNew - 一个新的迭代器,用于迭代点的邻域,并自动处理边界。在 C-API 参考的迭代器部分有文档介绍,在 numpy.core 的 multiarray_test.c.src 文件中可以找到一些示例。
新的 ufuncs
已向 C API 添加了以下 ufuncs:
- copysign - 返回从第二个参数复制标志的第一个参数的值。
- nextafter - 返回第一个参数朝向第二个参数的下一个可表示浮点值。
新的定义
现在在 numpy/npy_cpu.h 中定义并可用的 alpha 处理器。已修复对 PARISC 处理器的检测失败。这些定义是:
- NPY_CPU_HPPA:PARISC
- NPY_CPU_ALPHA:Alpha
测试
- 废弃的装饰器:可以使用此装饰器来避免在测试时垃圾数据测试输出,同时确保修饰的测试有效引发 DeprecationWarning。
- assert_array_almost_equal_nulp:用于比较两个浮点值数组的新方法。通过该函数,如果两个值之间没有很多可表示的浮点值,则被认为是接近的,因此比 assert_array_almost_equal 在值波动很大时更加健壮。
- assert_array_max_ulp:如果两个浮点值之间有多于 N 个可表示数,就引发一个断言。
- assert_warns:如果可调用对象未生成适当类别的警告,则引发 AssertionError,而不更改警告状态。
重用 npymath
在 1.3.0 版本中,我们开始将可移植的 C 数学例程放在 npymath 库中,以便人们可以使用它们来编写可移植的扩展。不幸的是,很难与此库进行链接:在 1.4.0 版本中,numpy.distutils 添加了对此库进行重用的支持。有关更多信息,请参阅 coremath 文档。
改进的集合操作
在 NumPy 的先前版本中,如果输入数组包含重复项,一些设置函数(intersect1d、setxor1d、setdiff1d 和 setmember1d)可能返回不正确的结果。现在,对于包含重复项的输入数组,这些函数现在能够正确工作。setmember1d 已重命名为 in1d,因为随着接受包含重复项的数组的变更,它不再是一个集合操作,而且在概念上类似于 Python 运算符 'in' 的元素级版本。所有这些函数现在都接受布尔关键字 assume_unique。这默认为 False,但如果已知输入数组不包含重复项,则可以设置为 True,这可以提高函数的执行速度。
对 ufuncs 的扩展数组包装机制
ndarray 添加了一个 array_prepare 方法,以便为子类提供更大的灵活性与 ufuncs 和类似 ufunc 的函数交互。ndarray 已经提供了 array_wrap,它允许子类设置结果的数组类型并在 ufunc 返回结果时填充元数据(如 MaskedArray 的实现中所见)。对于某些应用程序,有必要在进行运算之前提供检查和填充元数据。因此,在初始化输出数组但在计算结果和填充之前,即可调用 array_prepare。这样,就可以进行检查并在可能修改数据的操作之前引发错误。
发现向前不兼容的自动检测
以前,如果扩展是针对版本 N 的 NumPy 构建的,并且在具有 NumPy M < N 的系统上使用,则 import_array 将成功,这可能会导致崩溃,因为版本 M 中没有版本 N 的功能。从 NumPy 1.4.0 开始,这将导致 import_array 失败,因此错误将被早期捕获。
新迭代器
新的邻域迭代器已添加到 C API 中。它可用于在数组的邻域中迭代项目,并可以自动处理边界条件。可以使用零和一填充,以及任意常数值,镜像和循环填充。
新的多项式支持
已添加新模块 chebyshev 和 polynomial。新的多项式模块与 numpy 中当前的多项式支持不兼容,但与新的 chebyshev 模块相似。对大多数人来说,最明显的区别是系数是从低到高阶指定,低级函数不与 Chebyshev 和 Polynomial 类作为参数一起工作,并且 Chebyshev 和 Polynomial 类包含一个域。域之间的映射是线性替换,两个类可以彼此转换,例如,一个域中的 Chebyshev 级数可以扩展为另一个域中的多项式。通常应使用新类,而不是低级函数,后者是为那些希望构建自己的类的人提供的。
新模块不会自动导入 numpy 命名空间,必须通过“import numpy.polynomial”语句明确导入。
新 C API
下列 C 函数已添加到 C API 中:
- PyArray_GetNDArrayCFeatureVersion:返回加载的 numpy 的API版本。
- PyArray_Correlate2 - 像 PyArray_Correlate 一样,但实现了常规的相关性定义。输入不会交换,并且对于复数数组会取共轭。
- PyArray_NeighborhoodIterNew - 一个新的迭代器,可用于迭代点的邻域,并具有自动边界处理。在 C-API 参考的迭代器部分中有文档,您可以在 numpy.core 的 multiarray_test.c.src 文件中找到一些示例。
新 ufuncs
下列 ufuncs 已添加到 C API 中:
- copysign - 返回具有从第二个参数复制的符号的第一个参数的值。
- nextafter - 返回第一个参数朝向第二个参数的下一个可表示的浮点值。
新定义
现在在 numpy/npy_cpu.h 中定义并可用的 alpha 处理器。已修复 PARISC 处理器的检测失败。定义如下:
- NPY_CPU_HPPA:PARISC
- NPY_CPU_ALPHA:Alpha
Testing
- 弃用的装饰器:此装饰器可用于在测试 DeprecationWarning 在被装饰的测试中有效触发的同时避免使测试输出混乱。
- assert_array_almost_equal_nulp: 用于比较两个浮点值数组的新方法。使用此函数,如果两个值之间没有许多可表示的浮点值,那么它们被认为是接近的,因此比较多变的 assert_array_almost_equal 更加耐用。
- assert_array_max_ulp: 如果两个浮点值之间有 N 个可表示的数字,则引发断言。
- assert_warns: 如果可调用对象未生成适当类别的警告,则引发 AssertionError,而不会更改警告状态。
重用 npymath
在 1.3.0 版本中,我们开始将可移植的 C 数学函数放入 npymath 库中,以便人们可以使用这些函数编写可移植的扩展。不幸的是,很难轻松地链接到此库:在 1.4.0 版本中,numpy.distutils 添加了对此库的支持,以便第三方可以重用此库。有关更多信息,请参见 coremath 文档。
改进的集合操作
在之前的 NumPy 版本中,如果输入数组包含重复项,则某些集合函数(intersect1d、setxor1d、setdiff1d 和 setmember1d)可能会返回不正确的结果。现在,这些函数已正确处理具有重复项的输入数组。setmember1d 已重命名为 in1d,因为随着接受包含重复项的数组的更改,它不再是一个集合操作,并且从概念上类似于 Python 运算符'in'的逐元素版本。所有这些函数现在接受布尔关键字 assume_unique。默认情况下为 False,但如果已知输入数组不包含重复项,则可以将其设置为 True,这可以提高函数的执行速度。
改进
numpy 导入速度明显提高(根据平台和计算机不同,提高了 20 至 30%)
sort 函数现在将 nan 排序到末尾。
- 实数排序顺序是[R, nan]
- 复杂排序顺序是[R + Rj, R + nanj, nan + Rj, nan + nanj]
如果复杂数具有相同的 nan 位置,则根据非 nan 部分(如果存在)对其进行排序。
类型比较函数已与 nan 的新排序一致。现在,对包含 nan 值的排序数组进行搜索现在可以使用 searchsorted。
复杂除法现在对溢出更加抗性强。
复杂整除现在对溢出更加抗性强。
弃用
以下函数已弃用:
- correlate: 增加了一个新的关键字参数 old_behavior。当 True(默认值)时,返回与以前相同的结果。当为 False 时,计算常规相关性,并针对复数数组取共轭。旧行为将在 NumPy 1.5 中移除,并在 1.4 中引发弃用警告。
- unique1d: 使用 unique 代替。unique1d 在 1.4 版本中引发弃用警告,并将在 1.5 版本中移除。
- intersect1d_nu: 使用 intersect1d 代替。intersect1d_nu 在 1.4 版本中引发弃用警告,并将在 1.5 版本中移除。
- setmember1d: 使用 in1d 代替。setmember1d 在 1.4 版本中引发弃用警告,并将在 1.5 版本中移除。
以下引发错误:
- 在操作 0 维数组时,
numpy.max
和其他函数仅接受axis=0
、axis=-1
和axis=None
。使用超出边界的轴表示存在错误,因此 Numpy 现在对这些情况抛出错误。- 不再允许指定
axis > MAX_DIMS
;Numpy 现在会抛出错误,而不是像axis=None
一样处理。
内部更改
在可用时使用 C99 复数函数
如果平台支持,则 numpy 复数类型现在保证与 C99 复数类型兼容。此外,复数 ufunc 现在使用平台的 C99 函数,而不是我们自己的函数。
分离 multiarray 和 umath 源代码
multiarray 和 umath 的源代码已经分割为单独的逻辑编译单元。这样做可以使源代码更易于新手理解。
分离编译
默认情况下,multiarray(和 umath)的每个文件都会被合并为一个文件进行编译,就像以前一样,但是如果 NPY_SEPARATE_COMPILATION 环境变量设置为非负值,则启用了每个文件的实验性个别编译。这使得在核心 numpy 上工作时,编译/调试循环速度更快。
分离核心数学库
新增的函数:
- npy_copysign
- npy_nextafter
- npy_cpack
- npy_creal
- npy_cimag
- npy_cabs
- npy_cexp
- npy_clog
- npy_cpow
- npy_csqr
- npy_ccos
- npy_csin
在可用时使用 C99 复数函数
如果平台支持,则 numpy 复数类型现在保证与 C99 复数类型兼容。此外,复数 ufunc 现在使用平台的 C99 函数,而不是我们自己的函数。
分离 multiarray 和 umath 源代码
multiarray 和 umath 的源代码已经分割为单独的逻辑编译单元。这样做可以使源代码更易于新手理解。
分离编译
默认情况下,multiarray(和 umath)的每个文件都会被合并为一个文件进行编译,就像以前一样,但是如果 NPY_SEPARATE_COMPILATION 环境变量设置为非负值,则启用了每个文件的实验性个别编译。这使得在核心 numpy 上工作时,编译/调试循环速度更快。
分离核心数学库
新增的函数:
- npy_copysign
- npy_nextafter
- npy_cpack
- npy_creal
- npy_cimag
- npy_cabs
- npy_cexp
- npy_clog
- npy_cpow
- npy_csqr
- npy_ccos
- npy_csin
NumPy 1.3.0 发布说明
此次较小更新包括大量错误修复、官方 python 2.6 支持以及一些新功能,如通用 ufuncs。
亮点
Python 2.6 支持
Python 2.6 现在在包括 windows 在内的所有之前支持的平台上得到支持。
www.python.org/dev/peps/pep-0361/
通用 ufuncs
不仅需要循环遍历标量函数,还需要循环遍历向量(或数组)函数,如 scipy.org/scipy/numpy/wiki/GeneralLoopingFunctions
上所解释的。我们建议通过泛化通用函数(ufuncs)来实现这一概念,并提供一个向 numpy 代码库添加~500 行的 C 实现。在当前(专门化的)ufuncs 中,基本功能仅限于逐元素操作,而泛化版支持“子数组”逐“子数组”操作。Perl 向量库 PDL 提供类似的功能,并在以下重新使用了其术语。
每个通用 ufunc 都有与之关联的信息,说明输入的“核心”维度是什么,以及相应的输出维度(逐元素 ufuncs 具有零个核心维度)。所有参数的核心维度列表称为 ufunc 的“签名”。例如,ufunc numpy.add 的签名为“(),()->()”,定义了两个标量输入和一个标量输出。
另一个例子是(参见 GeneralLoopingFunctions 页面)具有签名“(i),(i)->()”的函数 inner1d(a,b)。这将沿着每个输入的最后一个轴应用内积,但保持其余索引不变。例如,当 a 的形状为(3,5,N) 而 b 的形状为(5,N) 时,这将返回形状为(3,5) 的输出。底层的基本功能被调用了 3*5 次。在签名中,我们为每个输入指定一个核心维度“(i)”和一个输出的零个核心维度“(”),因为它接受两个 1 维数组并返回一个标量。通过使用相同的名称“i”,我们指定这两个对应维度应该是相同大小的(或其中一个大小为 1,将被广播)。
核心维度之外的维度称为“循环”维度。在上面的示例中,这对应于(3,5)。
通常的 numpy“广播”规则适用,其中签名确定每个输入/输出对象的维度如何分为核心和循环维度:
当输入数组的维度小于对应的核心维度数量时,在其形状之前加入 1。将核心维度从所有输入中移除,并将剩余维度广播;定义循环维度。输出由循环维度加上输出核心维度给出。
实验性的 Windows 64 位支持
现在可以在 Windows 64 位系统上(仅限 amd64,不支持 IA64)使用 MS 编译器和 mingw-w64 编译器构建 Numpy:
这是高度实验性的:不要用于生产用途。请参阅 INSTALL.txt,Windows 64 位部分,了解限制和如何自行构建的更多信息。
新功能
格式化问题
浮点格式现在由 numpy 处理,而不是由 C 运行时处理:这样可以实现与语言环境无关的格式化,更健壮的 fromstring 和相关方法。特殊值(inf 和 nan)在各个平台上也更一致(nan vs IND/NaN 等),并且与最新的 Python 格式处理(在 2.6 及更高版本)更一致。
max/min 中的 nan 处理
最大/最小 ufunc 现在可靠地传递 nan。如果其中一个参数是 nan,则返回 nan。这影响 np.min/np.max,amin/amax 和数组方法 max/min。新增的 ufunc fmax 和 fmin 用于处理不传播的 nan。
sign 中的 nan 处理
现在,ufunc sign 以 nan 返回 anan 的符号。
新的 ufuncs
-
fmax - 对于整数类型和非 nan 浮点数,与最大值相同。如果一个参数是 nan,则返回非 nan 参数,如果两个参数都是 nan,则返回 nan。
-
fmin - 对于整数类型和非 nan 浮点数,与最小值相同。如果一个参数是 nan,则返回非 nan 参数,如果两个参数都是 nan,则返回 nan。
-
deg2rad - 将度数转换为弧度,与弧度 ufunc 相同。
-
rad2deg - 将弧度转换为度数,与度数 ufunc 相同。
-
log2 - 以 2 为底的对数。
-
exp2 - 以 2 为底的指数。
-
trunc - 将浮点数截断至最靠近零的整数。
-
logaddexp - 将存储为对数的数字相加并返回结果的对数。
-
logaddexp2 - 将存储为基数 2 对数的数字相加并返回结果的基数 2 对数。
掩蔽数组
包括几个新功能和 bug 修复,其中包括:
- 结构化数组现在应该得到 MaskedArray 的全面支持(r6463,r6324,r6305,r6300,r6294…)
- 小 bug 修复(r6356,r6352,r6335,r6299,r6298)
- 改进了对 iter 的支持(r6326)
- 使 baseclass、sharedmask 和 hardmask 对用户可访问(但是只读)
- 文档更新
Windows 上的 gfortran 支持
现在可以将 Gfortran 用作 Windows 上的 numpy 的 Fortran 编译器,即使 C 编译器是 Visual Studio(VS 2005 及以上版本;VS 2003 不会起作用)。在 Windows 64 位系统上,Gfortran + Visual Studio 不起作用(但 gcc + gfortran 可以)。尚不清楚是否可以在 x64 上完全使用 gfortran 和 Visual Studio。
用于 Windows 二进制文件的 Arch 选项
现在可以通过命令行绕过自动检测超级包的架构:
numpy-1.3.0-superpack-win32.exe /arch=nosse
将安装一个可以在任何 x86 上运行的 numpy,即使运行计算机支持 SSE 设置。
不推荐使用的功能
直方图
直方图的语义已更改以修复与离群值处理相关的长期问题。主要变化涉及
-
包括最右边的边缘在内的箱边界的定义,以及
-
对上限离群值的处理方式已更改,现在在最右边的箱中被忽略而不是被计数。
先前的行为仍可通过new=False访问,但已被弃用,并将在 1.4.0 中完全移除。
文档更改
添加了大量文档。用户指南和参考资料可以从 sphinx 中构建。
新的 C API
Multiarray API
以下函数已添加到 multiarray C API 中:
- PyArray_GetEndianness:获取运行时的字节顺序
Ufunc API
以下函数已添加到 ufunc API 中:
- PyUFunc_FromFuncAndDataAndSignature:声明一个更常规的 ufunc(广义 ufunc)。
新定义
通过 numpy/npy_cpu.h 现在提供了用于特定代码的 ARCH 的新公共 C 定义:
- NPY_CPU_X86: x86 架构(32 位)
- NPY_CPU_AMD64: amd64 架构(x86_64,非 Itanium)
- NPY_CPU_PPC:32 位 ppc
- NPY_CPU_PPC64: 64 位 ppc
- NPY_CPU_SPARC: 32 位 sparc
- NPY_CPU_SPARC64: 64 位 sparc
- NPY_CPU_S390:S390
- NPY_CPU_IA64: ia64
- NPY_CPU_PARISC:PARISC
也添加了 CPU 字节顺序的新宏(有关详细信息,请参见下文的内部更改):
- NPY_BYTE_ORDER:整数
- NPY_LITTLE_ENDIAN/NPY_BIG_ENDIAN 定义
为那些没有的平台提供可移植的 glibc endian.h 宏。
可移植的 NAN、INFINITY 等...
npy_math.h 现在提供了几个可移植的宏,用于获取 NAN、INFINITY:
- NPY_NAN: 等同于 GNU 扩展的 NAN
- NPY_INFINITY: 等同于 C99 INFINITY
- NPY_PZERO, NPY_NZERO:正零和负零
相应的单精度和扩展精度宏也可用。为了一致性,所有对 NAN 的引用或现场计算 NAN 的处理方式都已移除。
内部更改
numpy.core 数学配置重组
这样可以更容易、更强大地移植到新平台。特别是配置阶段不需要在目标平台上执行任何代码,这是迈向交叉编译的第一步。
www.numpy.org/neps/nep-0003-math_config_clean.html
umath 重构
对 umath/ufunc 代码进行了大量清理(charris)。
改进了构建警告
Numpy 现在可以在不警告的情况下使用-W-Wall 构建
www.numpy.org/neps/nep-0002-warnfix.html
单独的核心数学库
核心数学函数(sin、cos 等...)已放入单独的库中;它作为兼容性层,支持大多数 C99 数学函数(目前仅为实数)。该库包括各种数学函数的特定于平台的修复,使用这些版本比直接使用你的平台函数更稳健。现有函数的 API 与 C99 数学函数的 API 完全相同;唯一的区别是 npyprefix(npy_cos 与 cos 相比)。
核心库将在 1.4.0 中提供给任何扩展。
CPU 架构检测
npy_cpu.h 定义了 numpy 特定的 CPU 定义,如 NPY_CPU_X86 等… 这些在 OS 和工具链之间是可移植的,并在头文件解析时设置,以便它们可以安全地在跨编译(值在构建 numpy 时未设置)或多架构二进制文件(如在 Max OS X 上的 fat 二进制文件)中使用。
npy_endian.h 定义了 numpy 特定的字节顺序定义,模仿了 glibc 的 endian.h。NPY_BYTE_ORDER 等同于 BYTE_ORDER,并且定义了 NPY_LITTLE_ENDIAN 或 NPY_BIG_ENDIAN 之一。至于 CPU 架构,这些是在头文件被编译器解析时设置的,并且因此可以用于跨编译和多架构二进制文件。
亮点
Python 2.6 支持
Python 2.6 现在在所有先前支持的平台上得到支持,包括 windows。
www.python.org/dev/peps/pep-0361/
泛化的 ufuncs
不仅需要循环遍历标量函数,还需要循环遍历向量(或数组)函数,如scipy.org/scipy/numpy/wiki/GeneralLoopingFunctions
中所解释的。我们建议通过泛化通用函数(ufuncs)来实现这一概念,并提供一个 C 实现,为 numpy 代码库增加了大约 500 行。在当前(专用)ufuncs 中,基本函数受限于逐元素操作,而泛化版本支持“子数组”之间的操作。Perl 向量库 PDL 提供了类似功能,并且它的术语在下文中被重复使用。
每个泛化的 ufunc 都有与之相关的信息,说明输入的“核心”维度是什么,以及对应的输出的维度(逐元素 ufuncs 具有零个核心维度)。所有参数的核心维度列表被称为 ufunc 的“签名”。例如,ufunc numpy.add 具有签名“(),()->()”,定义了两个标量输入和一个标量输出。
另一个例子是(参见 GeneralLoopingFunctions 页面)具有“(i),(i)->()”签名的函数 inner1d(a,b)。这将沿着每个输入的最后一个轴应用内积,但保持其余索引不变。例如,如果 a 的形状为(3,5,N),b 的形状为(5,N),则返回形状为(3,5)的输出。底层基本函数被调用了 3*5 次。在签名中,我们为每个输入指定一个核心维度“(i)”,为输出指定零个核心维度“()”,因为它接受两个 1 维数组并返回一个标量。通过使用相同的名称“i”,我们指定两个对应的维度应该具有相同的大小(或其中一个大小为 1,并且将被广播)。
超出核心维度的维度被称为“循环”维度。在上面的示例中,这对应于(3,5)。
使用 numpy 的通常“广播”规则,其中签名确定每个输入/输出对象的维度如何分成核心和循环维度:
当一个输入数组的维度小于对应的核心维度数量时,会在其形状之前添加1
。核心维度将从所有输入中移除,并广播剩余的维度,定义循环维度。输出由循环维度和输出核心维度组成。
实验性的 Windows 64 位支持
Numpy 现在可以在 Windows 64 位上构建(仅 amd64,不包括 IA64),同时使用 MS 编译器和 mingw-w64 编译器:
这是非常实验性的:不要用于生产环境。有关限制和如何自行构建的更多信息,请参阅 INSTALL.txt 中的 Windows 64 位部分。
支持 Python 2.6
Python 2.6 现在在先前支持的所有平台上都得到支持,包括 Windows。
www.python.org/dev/peps/pep-0361/
广义 ufuncs
不仅需要循环处理标量函数,还需要循环处理向量(或数组)函数,详见scipy.org/scipy/numpy/wiki/GeneralLoopingFunctions
。我们建议通过泛化通用函数(ufuncs)来实现这个概念,并提供一个 C 实现,将近 500 行添加到 numpy 代码库中。在当前(专用)的 ufuncs 中,基本函数仅支持逐元素操作,而广义版本支持“子阵列”间的操作。Perl 向量库 PDL 提供了类似的功能,并在下面的内容中重复使用其术语。
每个广义 ufunc 都有与之相关联的信息,声明输入的“核心”维度以及相应的输出维度(逐元素 ufuncs 具有零个核心维度)。所有参数的核心维度列表称为 ufunc 的“签名”。例如,ufunc numpy.add 的签名是“(),()->()”,定义了两个标量输入和一个标量输出。
另一个例子是(参见 GeneralLoopingFunctions 页面)具有签名“(i),(i)->()”的函数 inner1d(a,b)。它沿着每个输入的最后一个轴应用内积,但保持其余索引不变。例如,当 a 的形状为(3,5,N),b 的形状为(5,N)时,将返回形状为(3,5)的输出。底层基本函数被调用 3*5 次。在签名中,我们为每个输入指定一个核心维度“(i)”,为输出指定零个核心维度“()”,因为它采用了两个 1-d 数组并返回一个标量。通过使用相同的名称“i”,我们指定了两个相应的维度应具有相同的大小(或其中一个大小为 1,将被广播)。
超出核心维度的维度称为“循环”维度。在上面的例子中,这对应于(3,5)。
通常的 numpy “broadcasting” 规则适用,其中签名确定每个输入/输出对象的维度如何分割为核心维度和循环维度:
当输入数组的维度小于对应的核心维度数量时,在其形状前面加上 1。从所有输入中移除核心维度,剩下的维度进行广播;定义循环维度。输出由循环维度加上输出核心维度给出。
实验性的 windows 64 位支持
现在可以在 windows 64 位(仅限 amd64,不是 IA64)上构建 Numpy,使用 MS 编译器和 mingw-w64 编译器:
这是高度实验性的:不要用于生产用途。有关限制和如何自行构建的更多信息,请参阅 INSTALL.txt,Windows 64 位部分。
新功能
格式问题
浮点格式现在由 numpy 处理,而不是由 C 运行时处理:这使得格式化与语言环境无关,fromstring 等方法更加稳健。特殊值(inf 和 nan)在不同平台上也更一致(nan vs IND/NaN 等),与最近的 python 格式化工作(2.6 及更高版本)更一致。
max/min 中的 NaN 处理
最大值/最小值 ufuncs 现在可靠地传播 nans。如果其中一个参数是 nan,则返回 nan。这影响 np.min/np.max,amin/amax 和数组方法 max/min。已添加新的 fmax 和 fmin ufuncs 以处理不传播 nans。
sign 中的 NaN 处理
ufunc sign 现在返回 nan 作为 anan 的符号。
新 ufuncs
-
fmax - 对于整数类型和非 nan 浮点数,与最大值相同。如果一个参数是 nan,则返回非 nan 参数;如果两个参数都是 nan,则返回 nan。
-
fmin - 对于整数类型和非 nan 浮点数,与最小值相同。如果一个参数是 nan,则返回非 nan 参数;如果两个参数都是 nan,则返回 nan。
-
deg2rad - 将度数转换为弧度,与 radians ufunc 相同。
-
rad2deg - 将弧度转换为度数,与 degrees ufunc 相同。
-
log2 - 基数 2 的对数。
-
exp2 - 基数 2 的指数。
-
trunc - 将浮点数截断为最接近零的整数。
-
logaddexp - 将作为对数存储的数字相加,并返回结果的对数。
-
logaddexp2 - 将存储为基数 2 的对数的数字相加,并返回结果的基数 2 对数。
Masked arrays
包括若干新功能和 bug 修复:
- 结构化数组现在应该被 MaskedArray 完全支持 (r6463, r6324, r6305, r6300, r6294…)
- 小 bug 修复 (r6356, r6352, r6335, r6299, r6298)
- 对 iter 进行了改进 (r6326)
- 使 baseclass、sharedmask 和 hardmask 对用户可访问(但只读)
- 文档更新
windows 上的 gfortran 支持
Gfortran 现在可以在 windows 上用作 numpy 的 Fortran 编译器,即使 C 编译器是 Visual Studio(VS 2005 及更高版本;VS 2003 不工作)。Gfortran + Visual Studio 不能在 64 位 windows 上工作(但 gcc + gfortran 可以)。目前尚不清楚是否可能在 x64 上使用 gfortran 和 Visual Studio。
Windows 二进制文件的架构选项
现在可以通过命令行绕过超级包的自动架构检测进行安装:
numpy-1.3.0-superpack-win32.exe /arch=nosse
安装一个可以在任何 x86 架构上运行的 numpy,即使运行计算机支持 SSE 指令集。
格式问题
浮点数格式现在由 numpy 处理而不是 C 运行时:这使得格式与语言环境无关,对 fromstring 和相关方法更健壮。特殊值(inf 和 nan)在不同平台上也更一致(nan vs IND/NaN 等),并与最近 Python 格式处理的工作更一致(在 2.6 及更高版本中)。
max/min 中的 NAN 处理
最大/最小的 ufuncs 现在可靠地传播 nan。如果其中一个参数是 nan,则返回 nan。这影响 np.min/np.max,amin/amax 和数组方法 max/min。新增的 ufuncs fmax 和 fmin 用于处理不传播 nan 的情况。
NAN 在 sign 中的处理
ufunc sign 现在返回 nan 作为 nan 的符号。
新的 ufuncs
-
fmax - 对于整数类型和非 nan 浮点数,与最大值相同。如果一个参数是 nan,则返回非 nan 参数,并且如果两个参数都是 nan,则返回 nan。
-
fmin - 对于整数类型和非 nan 浮点数,与最小值相同。如果一个参数是 nan,则返回非 nan 参数,并且如果两个参数都是 nan,则返回 nan。
-
deg2rad - 将角度转换为弧度,与 radians ufunc 相同。
-
rad2deg - 将弧度转换为角度,与 degrees ufunc 相同。
-
log2 - 以 2 为底的对数。
-
exp2 - 以 2 为底的指数。
-
trunc - 将浮点数截断为最接近零的整数。
-
logaddexp - 将以对数形式存储的数相加并返回结果的对数。
-
logaddexp2 - 将以 2 为底形式存储的数相加并返回结果的以 2 为底的对数。
掩码数组
几个新功能和错误修复,其中包括
- 结构化数组现在应该得到 MaskedArray 的全面支持(r6463,r6324,r6305,r6300,r6294 等)
- 小错误修复(r6356,r6352,r6335,r6299,r6298)
- 对 iter 的改进(r6326)
- 将 baseclass、sharedmask 和 hardmask 对用户开放(但是只读)
- 文档更新
Windows 上的 gfortran 支持
Gfortran 现在可以作为 numpy 在 Windows 上的 Fortran 编译器使用,即使 C 编译器是 Visual Studio(VS 2005 及以上版本;VS 2003 不可用)。在 Windows 64 位系统上,Gfortran + Visual studio 不可用(但 gcc + Gfortran 可用)。目前不清楚是否可以在 x64 上完全使用 gfortran 和 Visual Studio。
Windows 二进制文件的架构选项
现在可以通过命令行绕过超级包的自动架构检测进行安装:
numpy-1.3.0-superpack-win32.exe /arch=nosse
安装一个可以在任何 x86 架构上运行的 numpy,即使运行计算机支持 SSE 指令集。
弃用的功能
直方图
直方图的语义已经修改,以解决长期以来与异常值处理相关的问题。主要改变涉及
-
箱边界的定义,现在包括最右侧的边界,以及
-
现在忽略上限的异常值,而不是在最右侧的箱中计数。
以 new=False 的方式仍然可以访问以前的行为,但这已被弃用,并将在 1.4.0 版本中完全删除。
Histogram
histogram 的语义已被修改以解决与处理异常值有关的长期问题。主要变化包括
-
定义分 bin 的方式已发生变化,现在最右侧的边缘也包含其中,并且
-
处理上界异常值的方式已被修改,现在将其忽略而不是计入最右侧的 bin 中。
以 new=False 的方式仍然可以访问以前的行为,但这已被弃用,并将在 1.4.0 版本中完全删除。
文档更改
添加了很多文档。用户指南和参考可以从 sphinx 构建。
新增的 C API
Multiarray API
新增了一些 multiarray C API 中的函数:
- PyArray_GetEndianness: 获取运行时字节顺序
Ufunc API
ufunc API 中新增的函数包括:
- PyUFunc_FromFuncAndDataAndSignature: 声明更通用的 ufunc(通用 ufunc)。
新添加的定义
可以通过 numpy/npy_cpu.h 在特定于 ARCH 的代码中使用新的公共 C 定义:
- NPY_CPU_X86: x86 架构(32 位)
- NPY_CPU_AMD64: amd64 架构(x86_64, 不是 Itanium)
- NPY_CPU_PPC: 32 位 ppc
- NPY_CPU_PPC64: 64 位 ppc
- NPY_CPU_SPARC: 32 位 sparc
- NPY_CPU_SPARC64: 64 位 sparc
- NPY_CPU_S390: S390
- NPY_CPU_IA64: ia64
- NPY_CPU_PARISC: PARISC
也新增了一些关于 CPU 字节顺序的宏(详见下面的内部更改):
- NPY_BYTE_ORDER: 整型
- NPY_LITTLE_ENDIAN/NPY_BIG_ENDIAN 定义
对于没有 glibc endian.h 宏的平台,这些定义提供了可移植的替代方案。
可移植的 NAN、INFINITY 等……
npy_math.h 现在提供了几个可移植的宏,用于获取 NAN、INFINITY:
- NPY_NAN: 等同于 NAN,这是一个 GNU 扩展
- NPY_INFINITY: 等同于 C99 INFINITY
- NPY_PZERO, NPY_NZERO:分别为正零和负零
相应的单精度和扩展精度的宏也可用。为了保持一致,所有对 NAN 的引用或即时计算 NAN 的自定义方法都已移除。
Multiarray API
新增了一些 multiarray C API 中的函数:
- PyArray_GetEndianness: 获取运行时字节顺序
Ufunc API
ufunc API 中新增的函数包括:
- PyUFunc_FromFuncAndDataAndSignature: 声明更通用的 ufunc(通用 ufunc)。
新增的定义
可以通过 numpy/npy_cpu.h 在特定于 ARCH 的代码中使用新的公共 C 定义:
- NPY_CPU_X86: x86 架构(32 位)
- NPY_CPU_AMD64: amd64 架构(x86_64,不是 Itanium)
- NPY_CPU_PPC: 32 位 ppc
- NPY_CPU_PPC64: 64 位 ppc
- NPY_CPU_SPARC: 32 位 sparc
- NPY_CPU_SPARC64: 64 位 sparc
- NPY_CPU_S390: S390
- NPY_CPU_IA64: ia64
- NPY_CPU_PARISC: PARISC
也新增了一些关于 CPU 字节顺序的宏(详见下面的内部更改):
- NPY_BYTE_ORDER: 整型
- NPY_LITTLE_ENDIAN/NPY_BIG_ENDIAN 定义
对于没有 glibc endian.h 宏的平台,这些定义提供了可移植的替代方案。
可移植的 NAN、INFINITY 等……
npy_math.h 现在提供了几个可移植的宏,用于获取 NAN、INFINITY:
- NPY_NAN: 等同于 NAN,这是 GNU 的扩展
- NPY_INFINITY: 等同于 C99 的 INFINITY
- NPY_PZERO, NPY_NZERO: 正零和负零
相应的单精度和扩展精度宏也可用。为了保持一致性,所有对 NAN 的引用,或者即兴计算 NAN 的处理方式都已经移除。
内部更改
numpy.core 数学配置改进
这应该使得向新平台的移植更加容易和稳健。特别是,配置阶段不需要在目标平台上执行任何代码,这是迈向交叉编译的第一步。
www.numpy.org/neps/nep-0003-math_config_clean.html
umath 重构
对 umath/ufunc 代码进行了大量清理(charris)。
改进构建警告
Numpy 现在可以在没有警告的情况下使用-W -Wall 构建
www.numpy.org/neps/nep-0002-warnfix.html
单独的核心数学库
核心数学函数(sin, cos 等...针对基本的 C 类型)已经放入单独的库中;它作为一个兼容性层,支持大部分 C99 的数学函数(目前只支持实数)。该库包括对各种数学函数的特定于平台的修复,因此使用这些版本应该比直接使用平台函数更可靠。现有函数的 API 与 C99 数学函数 API 完全相同;唯一的区别就是 npyprefix(npy_cos vs cos)。
核心库将在 1.4.0 中向任何扩展提供。
CPU 体系结构检测
npy_cpu.h 定义了 numpy 特定的 CPU 定义,如 NPY_CPU_X86 等...这些在 OS 和工具链中是可移植的,并且在解析头文件时进行设置,因此即使在交叉编译的情况下(当构建 numpy 时未设置这些值),或者在多体系结构二进制文件(例如在 Max OS X 上的 fat 二进制文件)中也可以安全地使用。
npy_endian.h 定义了 numpy 特定的字节顺序定义,模仿了 glibc 的 endian.h。NPY_BYTE_ORDER 等同于 BYTE_ORDER,并且定义了 NPY_LITTLE_ENDIAN 或 NPY_BIG_ENDIAN 中的一个。与 CPU 体系结构一样,这些值在编译器解析头文件时设置,并因此可以用于交叉编译和多体系结构二进制文件。
numpy.core 数学配置改进
这应该使得向新平台的移植更加容易和稳健。特别是,配置阶段不需要在目标平台上执行任何代码,这是迈向交叉编译的第一步。
www.numpy.org/neps/nep-0003-math_config_clean.html
umath 重构
对 umath/ufunc 代码进行了大量清理(charris)。
改进构建警告
Numpy 现在可以在没有警告的情况下使用-W -Wall 构建
www.numpy.org/neps/nep-0002-warnfix.html
单独的核心数学库
核心数学函数(对于基本 C 类型的 sin、cos 等)已被放入单独的库中,该库作为兼容层,支持大多数 C99 数学函数(目前仅支持实数)。该库包括针对各种数学函数的平台特定修复,因此使用这些版本应比直接使用平台函数更可靠。现有函数的 API 与 C99 数学函数的 API 完全相同,唯一的区别是前缀添加了 npy(npy_cos vs cos)。
核心库将在 1.4.0 版本中对任何扩展程序开放。
CPU 架构检测
npy_cpu.h 定义了特定于 numpy 的 CPU 定义,如 NPY_CPU_X86 等。这些定义在操作系统和工具链中是可移植的,并在解析头文件时进行设置,因此即使在交叉编译的情况下(在构建 numpy 时未设置值)或多架构二进制文件的情况下(例如 Mac OS X 上的 fat binaries),也可以安全地使用它们。
npy_endian.h 定义了特定于 numpy 的字节顺序定义,基于 glibc endian.h 的模型。NPY_BYTE_ORDER 等同于 BYTE_ORDER,并且定义了 NPY_LITTLE_ENDIAN 或 NPY_BIG_ENDIAN 其中之一。至于 CPU 架构,则在编译器解析头文件时进行设置,并且可以用于交叉编译和多架构二进制文件。