Numpy 1.11.0发行说明

这个版本支持python 2.6-2.7和3.2-3.5,并包含了一些增强和改进。还要注意下面列出的构建系统更改,因为它们可能有细微的影响。

由于工具链中断,没有为此版本提供Windows(tm)二进制文件。python packages for windows(tm)的其中一个提供者是您的最佳选择。

集锦

这些改进的细节可以在下面找到。

  • datetime64类型现在是时区naive。

  • 已将dtype参数添加到 randint .

  • 改进了对可能共享内存的两个数组的检测。

  • 自动料仓尺寸估计 np.histogram .

  • A@A.T和DOT(A,A.T)的速度优化。

  • 新功能 np.moveaxis 用于重新排列阵列轴。

生成系统更改

  • 现在使用 NumPy setuptools 而不是普通的distutils。这修复了 install_requires='numpy'setup.py 依赖于numpy的项目的文件(参见gh-6551)。但它可能会影响numpy本身的构建/安装方法的行为方式。请报告numpy问题跟踪器上的任何意外行为。

  • Bento构建支持和相关文件已被删除。

  • 已删除单个文件生成支持和相关文件。

未来变化

以下更改计划用于numpy 1.12.0。

  • 将放弃对python 2.6、3.2和3.3的支持。

  • 放松步幅检查将成为默认设置。请参阅1.8.0发行说明,以更广泛地讨论此更改的含义。

  • datetime64“非时间”(nat)值的行为将更改为与浮点“非数字”(nan)值的行为匹配:所有涉及nat的比较都将返回false,nat除外!=nat,返回true。

  • 使用浮动进行索引会导致索引错误,例如 [0,0] .

  • 使用非整数数组进行索引将引发 IndexError ,例如, a['1', '2']

  • 使用多个省略号进行索引将引发 IndexError ,例如, a[..., ...] .

  • 用作索引值的非整数将引发 TypeError ,例如,在 reshapetake ,并指定减少轴。

在将来的版本中,将进行以下更改。

  • 这个 rand 功能暴露于 numpy.testing 将被删除。这个函数是从numpy早期遗留下来的,是使用python随机模块实现的。随机数生成器来自 numpy.random 应该改为使用。

  • 这个 ndarray.view 方法将只允许使用不同大小的数据类型查看连续数组,从而导致最后一个维度发生更改。它不同于当前的行为,其中F_连续但C_不连续的数组可以被视为不同大小的数据类型,从而导致第一个维度发生更改。

  • 切片A MaskedArray 将返回两个数据的视图 and 面具。当前该遮罩是写时复制的,对切片中遮罩的更改不会传播到原始遮罩。有关详细信息,请参阅下面的“未来警告”部分。

兼容性说明

日期时间64更改

在numpy的早期版本中,实验日期时间64类型始终以UTC格式存储时间。默认情况下,从字符串创建datetime64对象或打印它将从本地时间或转换为本地时间:

# old behavior
>>> np.datetime64('2000-01-01T00:00:00')
numpy.datetime64('2000-01-01T00:00:00-0800')  # note the timezone offset -08:00

datetime64用户一致认为这种行为是不可取的,并且与通常使用datetime64的方式不一致(例如 pandas ②)对于大多数用例,首选时区的原始日期时间类型,类似于 datetime.datetime 键入python标准库。因此,datetime64不再假定输入是本地时间,也不打印本地时间:

>>> np.datetime64('2000-01-01T00:00:00')
numpy.datetime64('2000-01-01T00:00:00')

为了向后兼容,datetime64仍然解析时区偏移量,它通过转换为UTC来处理这些偏移量。但是,得到的日期时间是时区初始的:

>>> np.datetime64('2000-01-01T00:00:00-08')
DeprecationWarning: parsing timezone aware datetimes is deprecated;
this will raise an error in the future
numpy.datetime64('2000-01-01T08:00:00')

作为这种变化的必然结果,我们不再禁止在日期单位的日期时间和时间单位的日期时间之间强制转换。对于时区naive datetime,从日期到时间的强制转换规则不再模棱两可。

linalg.norm 返回类型更改

的返回类型 linalg.norm 函数现在是无例外的浮点。一些范数类型以前返回整数。

多项式拟合变化

numpy多项式包中的各种拟合函数不再接受非整数的度数说明。

np.dot 现在提出 TypeError 而不是 ValueError

这种行为类似于其他功能,例如 np.inner . 如果不能将这两个参数强制转换为公共类型,则可能引发了 TypeErrorValueError 取决于他们的顺序。现在, np.dot 现在总是提高 TypeError .

未来走向改变的行为

  • np.lib.split 结果中的空数组始终具有维度 (0,) 不管数组的大小被拆分。这已更改,以便保留尺寸。一 FutureWarning 因为这种变化从numpy 1.9开始就已经存在了,但是,由于一个错误,有时没有发出警告,并且尺寸已经被保留了。

%// 算子

这些运算符是用 remainderfloor_divide 各功能。这些功能现在基于 fmod 它们一起计算,以便彼此兼容,并与浮动类型的Python版本兼容。与之前的结果相比,结果应该稍微更准确或更彻底地修复错误,但在Roundoff对 floor_divide . 一些角情况也会改变,例如,当除数为零时,两个函数的NaN总是返回。 divmod(1.0, inf) 收益率 (0.0, 1.0) 除了MSVC 2008,以及 divmod(-1.0, inf) 收益率 (-1.0, inf) .

计算机辅助编程接口

移除 check_returninner_loop_selector 成员 PyUFuncObject 结构(将其替换为 reserved 用于保留结构布局的槽)。这些代码从未被用于任何用途,所以任何第三方代码也不太可能使用它们,但为了完整起见,我们在这里提到它。

旧样式类的对象数据类型检测

在python 2中,属于旧式用户定义类实例的对象不再自动计算为dtype检测处理程序中的“object”类型。相反,与Python3中一样,它们可能会作为序列计数,但前提是它们同时定义了 __len__ and a `_ _ getitem_uuuuw`方法。这修复了python 2和3之间的segfault和不一致性。

新特点

  • np.histogram 现在提供了插件估计器来自动估计最佳的垃圾箱数量。通过其中之一 [“汽车”,“FD”,“史葛”,“大米”,“Surges”] 作为“bins”的参数,将使用相应的估计量。

  • 基准套件使用 Airspeed Velocity _已添加,正在转换以前基于vbench的vbench。您可以通过以下方式在本地运行套件: python runtests.py --bench . 有关详细信息,请参阅 benchmarks/README.rst .

  • 一个新函数 np.shares_memory 这可以精确地检查是否添加了两个数组的内存重叠。 np.may_share_memory 现在也可以选择花费更多的精力来减少误报。

  • SkipTestKnownFailureException 异常类在 numpy.testing 命名空间。在测试函数中提升它们,以分别标记要跳过的测试或将其标记为已知失败。

  • f2py.compile 有新的 extension 关键字参数,允许为生成的临时文件指定Fortran扩展名。例如,可以将文件指定为 *.f90 . 这个 verbose 参数也被激活,它以前被忽略。

  • A dtype 参数已添加到 np.random.randint 现在可以生成以下类型的随机日期:

    • np.bool_,

    • np.int8np.uint8

    • np.int16np.uint16

    • np.int32np.uint32

    • np.int64np.uint64

    • np.int_ ``, ``np.intp

    规格是按精度而不是按C型。因此,在某些平台上 np.int64 可能是 long 而不是 long long 即使指定的数据类型是 long long 因为两者的精度可能相同。结果类型取决于numpy所使用的C类型的给定精度。字节顺序规范也被忽略,生成的数组总是以本机字节顺序。

  • 一个新的 np.moveaxis 函数允许通过显式提供源轴和目标轴,将一个或多个数组轴移动到新位置。这个函数应该比当前函数更容易使用 rollaxis 同时提供更多功能。

  • 这个 deg 各种参数 numpy.polynomial 拟合已经扩展到接受要包含在拟合中的项的度数列表,所有其他项的系数被限制为零。更改是向后兼容的,传递一个标量 deg 会像以前一样。

  • 用于在python版本之后建模的float类型的divmod函数已添加到npy_数学库中。

改进

np.gradient 现在支持一个 axis 论点

这个 axis 参数已添加到 np.gradient 为了一致性。它允许指定计算渐变的轴。

np.lexsort 现在支持对象数据类型的数组

函数现在在内部调用泛型 npy_amergesort 当类型不实现 argsort 方法。

np.ma.core.MaskedArray 现在支持一个 order 论点

在构建新的 MaskedArray 实例,它可以配置为 order 与调用时类似的参数 np.ndarray . 此参数的添加允许正确处理 order 几个与maskedarray相关的实用程序函数中的参数,如 np.ma.core.arraynp.ma.core.asarray .

屏蔽阵列的内存和速度改进

使用创建屏蔽数组 mask=True (RESP) mask=False 现在使用 np.ones (RESP) np.zeros )创建的掩模,速度更快,避免了一个大的内存峰值。另一个优化是为了避免在打印屏蔽数组时出现内存峰值和无用的计算。

ndarray.tofile 现在在Linux上使用fallocate

函数现在使用fallocate系统调用在支持它的文件系统上保留足够的磁盘空间。

表单操作的优化 A.T @ AA @ A.T

以前, gemm 所有矩阵产品均采用BLAS操作。现在,如果矩阵积在矩阵及其转置之间,它将使用 syrk BLAS操作可提高性能。此优化已扩展到 @numpy.dotnumpy.innernumpy.matmul .

注: 需要转置和非转置矩阵来共享数据。

np.testing.assert_warns 现在可以用作上下文管理器

这符合 assert_raises .

np.random.shuffle的速度改进

np.random.shuffle 现在1d天的时间要快得多。

变化

Pyrex支架从 numpy.distutils

方法 build_src.generate_a_pyrex_source 将保持可用;用户已通过MonkeyPatched来支持Cython而不是Pyrex。不过,建议切换到一种支持得更好的构建Cython扩展的方法。

np.broadcast 现在可以用单个参数调用

在这种情况下,生成的对象将简单地模拟单个数组上的迭代。这一变化消除了诸如

如果LeN(x)=1:

形状=x [0] 形状

其他:

形状=NP.广播( * x)形状

相反, np.broadcast 适用于所有情况。

np.trace 现在考虑数组子类

这种行为类似于其他功能,例如 np.diagonal 并确保,例如,对于屏蔽数组 np.trace(ma)ma.trace() 给出同样的结果。

np.dot now raises TypeError instead of ValueError

这种行为类似于其他功能,例如 np.inner . 如果不能将这两个参数强制转换为公共类型,则可能引发了 TypeErrorValueError 取决于他们的顺序。现在, np.dot 现在总是提高 TypeError .

linalg.norm 返回类型更改

这个 linalg.norm 函数现在以浮点形式进行所有计算,并返回浮点结果。此更改修复了由于整数溢出和具有最小值的有符号整数(如int8(-128))的abs失败而导致的错误。为了一致性,即使整数可能工作,也会使用浮动。

贬抑

按FORTRAN顺序排列的数组视图

f_连续标志用于表示使用更改元素大小的数据类型的视图将更改第一个索引。对于同时是f ou连续和c ou连续的数组,这总是有问题的,因为c ou连续优先。轻松的跨步检查会导致更多这样的双连续数组,并因此中断一些现有代码。请注意,这也会影响通过分配给数组的dtype属性来更改dtype。这种拒绝的目的是在将来的某个时候将视图限制为连续数组。向后兼容的解决方案是使用 a.T.view(...).T 相反。也可以向View方法中添加一个参数,以显式地请求Fortran顺序视图,但这不会是向后兼容的。

数组排序的参数无效

目前可以为 order 方法中的参数,如 array.flattenarray.ravel 这不是以下值之一:“c”、“f”、“a”、“k”(请注意,所有这些可能的值都是Unicode和不区分大小写)。在将来的版本中将不允许这样的行为。

中的随机数生成器 testing 命名空间

python标准库随机数生成器以前在 testing 命名空间AS testing.rand . 不建议使用此发电机,它将在将来的版本中被删除。使用来自的生成器 numpy.random 改为命名空间。

闭区间上的随机整数生成

根据python c api,它优先于半开间隔而不是闭合间隔, np.random.random_integers 正在被弃用以支持调用 np.random.randint ,已通过 dtype 参数如“新功能”所述。然而, np.random.random_integers 不会很快被移除。

FutureWarnings

分配到的切片/视图 MaskedArray

当前,屏蔽数组的一个切片包含原始数据的视图和该屏蔽的“写入时复制”视图。因此,对切片的遮罩所做的任何更改都将生成原始遮罩的副本,并且更改新遮罩而不是原始遮罩。例如,如果我们像这样对原始图像进行切片, view = original[:] ,则对一个数组中的数据的修改将影响另一个数组的数据,但由于将在分配操作期间复制该掩码,因此对该掩码的更改将保留在本地。当使用 MaskedArray(data, mask) ,返回的数组将包含 data 但是这个页面将是 mask .

在将来,这些情况将被规范化,以便以相同的方式处理数据和遮罩数组,对它们的修改将在视图之间传播。在1.11中,numpy将发布 MaskedArrayFutureWarning 警告:每当用户代码修改视图的掩码时,如果该掩码将来可能导致值传播回原始视图。要消除这些警告并使代码对即将发生的更改保持健壮,您有两个选项:如果要保持当前行为,请调用 masked_view.unshare_mask() 在修改遮罩之前。如果你想提前得到未来的行为,使用 masked_view._sharedmask = False . 但是,请注意,设置 _sharedmask 属性将中断对的显式调用 masked_view.unshare_mask() .