在numpy中禁用静默转换

2024-04-25 19:10:24 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法在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对象是否可以配置为返回TypeError? 如果不是,最好的选择是子类numpy.ndarray(并重写__setattr__或{})吗?在


Tags: toimportnumpyconvertasnpokwill
2条回答

不幸的是,numpy没有在数组创建中提供此功能,您可以设置是否只有在转换数组时才允许强制转换(请查看文档中的^{})。在

您可以使用该特性或子类numpy.ndarray,但也可以考虑使用python本身提供的^{}模块来创建类型化数组:

from array import array

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

只是个主意。在

#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'

相关问题 更多 >

    热门问题