禁用numpy中的静默转换


问题内容

有没有办法禁用numpy中的静默转换?

import numpy as np
a = np.empty(10, int)
a[2] = 4     # OK
a[3] = 4.9   # Will silently convert to 4, but I would prefer a TypeError
a[4] = 4j    # TypeError: can't convert complex to long

分配任何非ndarray类型的值时,可以将numpy.ndarray对象配置为返回a吗?如果不是,最好的替代方法是子类化(并重写或)?TypeError``isinstance()``numpy.ndarray``__setattr__``__setitem__


问题答案:

不幸的是numpy,在数组创建中没有提供此功能,您可以设置是否仅在转换数组时才允许强制转换(请参阅文档numpy.ndarray.astype)。

您可以使用该功能或​​子类numpy.ndarray,但也可以考虑使用arraypython本身提供的模块来创建类型化数组:

from array import array

a = array('i', [0] * 10)
a[2] = 4                   # OK
a[3] = 4.9                 # TypeError: integer argument expected, got float