这一次要功能包括大量的错误修复、官方的python 2.6支持以及一些新功能,如通用的ufunc。
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位(仅限AMD64,而不是IA64)上构建numpy,同时使用MS编译器和mingw-w64编译器:
这是 高度实验性 :请勿用于生产用途。请参阅install.txt,Windows 64位部分,了解有关限制和如何自己构建限制的更多信息。
浮动格式现在由numpy来处理,而不是由C运行时来处理:这将启用与区域设置无关的格式、更健壮的字符串和相关方法。特殊值(inf和nan)在不同平台之间也更为一致(nan与ind/nan等),并且与最近的Python格式化工作(在2.6及更高版本中)更为一致。
现在,最大/最小UFUNC可靠地传播了NAN。如果其中一个参数是NaN,则返回NaN。这会影响np.min/np.max、amin/amax和数组方法max/min。添加了新的ufuncs fmax和fmin来处理非传播的nan。
ufunc符号现在返回nan作为anan的符号。
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为底的对数。
几个新功能和错误修复,包括:
现在,MaskedArray应该完全支持结构化阵列(R6463、R6324、R6305、R6300、R6294…) 小错误修复(R6356、R6352、R6335、R6299、R6298) 改进了对 __iter__ (R6326) 使用户可以访问baseclass、sharedmask和hardmask(但为只读) 文档更新
现在,MaskedArray应该完全支持结构化阵列(R6463、R6324、R6305、R6300、R6294…)
小错误修复(R6356、R6352、R6335、R6299、R6298)
改进了对 __iter__ (R6326)
使用户可以访问baseclass、sharedmask和hardmask(但为只读)
文档更新
gfortran现在可以在Windows上用作numpy的Fortran编译器,即使C编译器是Visual Studio(2005及更高版本;2003不起作用)。gfortran+Visual Studio不能在64位的Windows上工作(但gcc+gfortran可以)。目前还不清楚是否可以在X64上使用gfortran和Visual Studio。
现在可以从安装的超级包的命令行中绕过自动拱门检测:
numpy-1.3.0-superpack-win32.exe/arch=nosse
将安装一个在任何x86上工作的numpy,即使运行的计算机支持SSE设置。
对柱状图的语义进行了修改,以解决长期存在的异常值处理问题。主要变化关注
垃圾箱边缘的定义,现在包括最右边的边缘,以及
上异常值的处理,现在被忽略,而不是记录在最右边的存储单元中。
以前的行为仍然可以使用访问 new=False ,但这已被弃用,将在1.4.0中完全删除。
添加了大量文档。用户指南和参考资料都可以从Sphinx构建。
以下函数已添加到多数组C API中:
pyarray?get endianness:获取运行时endianness
以下函数已添加到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:巴黎
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定义
npy_字节_顺序:整数
npy-little-endian/npy-big-endian定义
它们为没有glibc-endian.h宏的平台提供了可移植的替代方案。
npy_math.h现在提供了几个可移植的宏来获取Nan,Infinity:
npy_nan:相当于nan,是GNU扩展 npy_无穷大:等于c99无穷大 npy_pzero、npy_nzero:分别为正零和负零
npy_nan:相当于nan,是GNU扩展
npy_无穷大:等于c99无穷大
npy_pzero、npy_nzero:分别为正零和负零
相应的单精度和扩展精度宏也可用。为了保持一致性,所有对NaN的引用或动态NaN的自生计算都已删除。
这将使移植到新平台变得更容易、更健壮。特别是,配置阶段不需要在目标平台上执行任何代码,这是跨编译的第一步。
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中的任何扩展。
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二进制文件。