在numpy中禁用静默转换

时间:2014-08-24 11:22:04

标签: python 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

可以numpy.ndarray对象配置为在分配ndarray类型的TypeError的任何值时返回isinstance()吗? 如果没有,最好的替代方案是将numpy.ndarray子类化(并覆盖__setattr____setitem__)吗?

2 个答案:

答案 0 :(得分:2)

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

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

from array import array

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

答案 1 :(得分:0)

只是一个想法。

#Python 2.7.3
>>> def test(value):
...     if '.' in str(value):
...         return str(value)
...     else:
...         return value
... 
>>> a[3]=test(4.0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for long() with base 10: '4.0'
相关问题