Numpy 1.3.0发行说明

这一次要功能包括大量的错误修复、官方的python 2.6支持以及一些新功能,如通用的ufunc。

集锦

python 2.6支持

Python2.6现在在所有以前支持的平台上都得到了支持,包括Windows。

https://www.python.org/dev/peps/pep-0361/

广义不明飞行物

正如http://scipy.org/scipy/numpy/wiki/general looping functions中所解释的那样,通常不仅需要遍历scalar上的函数,还需要遍历向量(或数组)上的函数。我们建议通过归纳通用函数(UFuncs)来实现这个概念,并提供一个C实现,在numpy代码库中添加大约500行。在当前的(专门的)UFunc中,基本函数仅限于元素对元素的操作,而通用版本支持“子数组”对“子数组”的操作。Perl向量库pdl提供了类似的功能,其术语在下面重复使用。

每个广义UFunc都有与其相关的信息,说明输入的“核心”维数是什么,以及输出的相应维数(元素方面的UFunc的核心维数为零)。所有参数的核心维度列表称为ufunc的“签名”。例如,ufunc numpy.add具有定义两个标量输入和一个标量输出的签名“(),()->()”。

另一个例子是(参见GeneralLoopingFunctions页面)带有“(i),(i)->()”签名的函数inner1d(a,b)。这将沿着每个输入的最后一个轴应用内部积,但保持其余索引不变。例如,如果a为形状(3,5,n),b为形状(5,n),则返回形状(3,5)的输出。底层的初等函数称为3*5次。在签名中,我们为每个输入指定一个核心维度“(i)”,为输出指定零个核心维度“()”,因为它接受两个一维数组并返回一个标量。通过使用相同的名称“i”,我们指定两个对应的维度应具有相同的大小(或者其中一个维度的大小为1,将被广播)。

超出核心尺寸的尺寸称为“环”尺寸。在上面的例子中,这对应于(3,5)。

通常的numpy“广播”规则适用,其中签名决定如何将每个输入/输出对象的维度拆分为核心和循环维度:

虽然输入数组的维数小于相应的核心维数,但1的维数是预挂在其形状上的。核心维度从所有输入中移除,其余维度被广播;定义循环维度。输出由回路尺寸加上输出核心尺寸给出。

实验性Windows 64位支持

现在可以在Windows 64位(仅限AMD64,而不是IA64)上构建numpy,同时使用MS编译器和mingw-w64编译器:

这是 高度实验性 :请勿用于生产用途。请参阅install.txt,Windows 64位部分,了解有关限制和如何自己构建限制的更多信息。

新特点

格式化问题

浮动格式现在由numpy来处理,而不是由C运行时来处理:这将启用与区域设置无关的格式、更健壮的字符串和相关方法。特殊值(inf和nan)在不同平台之间也更为一致(nan与ind/nan等),并且与最近的Python格式化工作(在2.6及更高版本中)更为一致。

NAN最大/最小处理

现在,最大/最小UFUNC可靠地传播了NAN。如果其中一个参数是NaN,则返回NaN。这会影响np.min/np.max、amin/amax和数组方法max/min。添加了新的ufuncs fmax和fmin来处理非传播的nan。

NAN搬运标志

ufunc符号现在返回nan作为anan的符号。

新UMULSS

  1. fmax-对于整数类型和非NaN浮点数,与最大值相同。如果一个参数是NaN,则返回非NaN参数;如果两个参数都是NaN,则返回NaN参数。

  2. fmin-对于整数类型和非Nan浮点,最小值相同。如果一个参数是NaN,则返回非NaN参数;如果两个参数都是NaN,则返回NaN参数。

  3. deg2rad-将度数转换为弧度,与弧度ufunc相同。

  4. rad2deg-将弧度转换为度,与度ufunc相同。

  5. log2-以2为底的对数。

  6. exp2-基2指数。

  7. trunc-截断浮点数,精确到接近零的整数。

  8. logaddexp-添加存储为对数的数字,并返回结果的对数。

  9. logaddexp2-添加以2为底的对数存储的数字,并返回结果以2为底的对数。

屏蔽阵列

几个新功能和错误修复,包括:

  • 现在,MaskedArray应该完全支持结构化阵列(R6463、R6324、R6305、R6300、R6294…)

  • 小错误修复(R6356、R6352、R6335、R6299、R6298)

  • 改进了对 __iter__ (R6326)

  • 使用户可以访问baseclass、sharedmask和hardmask(但为只读)

  • 文档更新

在Windows上支持gfortran

gfortran现在可以在Windows上用作numpy的Fortran编译器,即使C编译器是Visual Studio(2005及更高版本;2003不起作用)。gfortran+Visual Studio不能在64位的Windows上工作(但gcc+gfortran可以)。目前还不清楚是否可以在X64上使用gfortran和Visual Studio。

用于Windows二进制文件的arch选项

现在可以从安装的超级包的命令行中绕过自动拱门检测:

numpy-1.3.0-superpack-win32.exe/arch=nosse

将安装一个在任何x86上工作的numpy,即使运行的计算机支持SSE设置。

不推荐使用的功能

直方图

对柱状图的语义进行了修改,以解决长期存在的异常值处理问题。主要变化关注

  1. 垃圾箱边缘的定义,现在包括最右边的边缘,以及

  2. 上异常值的处理,现在被忽略,而不是记录在最右边的存储单元中。

以前的行为仍然可以使用访问 new=False ,但这已被弃用,将在1.4.0中完全删除。

文件变更

添加了大量文档。用户指南和参考资料都可以从Sphinx构建。

新的C API

多阵列API

以下函数已添加到多数组C API中:

  • pyarray?get endianness:获取运行时endianness

UFUNC API

以下函数已添加到ufunc api中:

  • pyufunc_FromFuncndDataandSignature:声明更通用的ufunc(通用ufunc)。

新定义

新的公共C定义可通过numpy/npy-cpu.h用于特定于arch的代码:

  • npy-cpu-x86:x86架构(32位)

  • npy_cpu_amd64:amd64 arch(x86_64,非Itanium)

  • npy-cpu-ppc:32位ppc

  • npy_cpu_ppc64:64位ppc

  • npy-cpu-sparc:32位sparc

  • npy-cpu-sparc64:64位sparc4

  • NPY_CPU_S390:S390

  • npy_cpu_ia64:ia64

  • npy_cpu_parisc:巴黎

还添加了新的CPU端序宏(有关详细信息,请参阅下面的内部更改):

  • npy_字节_顺序:整数

  • npy-little-endian/npy-big-endian定义

它们为没有glibc-endian.h宏的平台提供了可移植的替代方案。

便携式NaN、Infinity等…

npy_math.h现在提供了几个可移植的宏来获取Nan,Infinity:

  • npy_nan:相当于nan,是GNU扩展

  • npy_无穷大:等于c99无穷大

  • npy_pzero、npy_nzero:分别为正零和负零

相应的单精度和扩展精度宏也可用。为了保持一致性,所有对NaN的引用或动态NaN的自生计算都已删除。

内部变更

numpy.core数学配置修改

这将使移植到新平台变得更容易、更健壮。特别是,配置阶段不需要在目标平台上执行任何代码,这是跨编译的第一步。

https://www.numpy.org/neps/nep-0003-math_config_clean.html

乌玛重构

umath/ufunc代码(charris)的大量代码清理。

对生成警告的改进

numpy现在可以在没有警告的情况下使用-w-墙进行构建

https://www.numpy.org/neps/nep-0002-warnfix.html

分离核心数学库

核心数学函数(sin、cos等…对于基本的C类型)已经被放入一个单独的库中;它充当一个兼容性层,以支持大多数C99数学函数(目前仅为real)。该库包括针对不同数学函数的平台特定修复,例如,使用这些版本应该比直接使用平台函数更强大。现有函数的api与c99数学函数api完全相同;唯一的区别是npy前缀(npy_cos vs cos)。

核心库将提供给1.4.0中的任何扩展。

CPU架构检测

npy-cpu.h定义了numpy特定的cpu定义,如npy-cpu-x86等…它们可以跨操作系统和工具链进行移植,并在解析头文件时进行设置,这样即使在交叉编译(构建numpy时不设置值)或多拱门二进制文件(例如max os x上的fat二进制文件)的情况下,也可以安全地使用它们。

npy-endian.h定义了numpy特定的endianness定义,以glibc-endian为模型。h.npy-byte-order等价于byte-order,并定义了npy-little-endian或npy-big-endian中的一个。对于CPU ARCH,它们是在编译器解析头文件时设置的,因此可以用于交叉编译和多ARCH二进制文件。