Numpy整数南

Yar*_*riv 43 python integer numpy nan

有没有办法将NaN存储在Numpy整数数组中?我明白了:

a=np.array([1],dtype=long)
a[0]=np.nan

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: cannot convert float NaN to integer
Run Code Online (Sandbox Code Playgroud)

Pie*_* GM 35

不,你不能,至少在当前版本的NumPy上.阿nan是浮法阵列的特殊值.

有关于引入一个特殊位的讨论将允许非浮点数组存储实际上对应的a nan,但到目前为止(2012/10),它只是会谈.

在此期间,您可能需要考虑numpy.ma包:您可以使用特殊numpy.ma.masked值来表示无效值,而不是选择像-99999这样的无效整数.

a = np.ma.array([1,2,3,4,5], dtype=int)
a[1] = np.ma.masked
masked_array(data = [1 -- 3 4 5],
             mask = [False  True False False False],
       fill_value = 999999)
Run Code Online (Sandbox Code Playgroud)

  • 但请注意,使用屏蔽数组会产生巨大的性能成本,因为它们是在纯python中实现的! (9认同)

小智 6

一个nan只是浮点数,整数中没有它的表示,所以没有:)

选择无效值,例如-99999

  • 将规范值选为无效将不是一个好的解决方案,因为它不会复制与nan相同的属性,即:nan与包括其自身在内的任何其他值之间的比较应该是错误的. (10认同)
  • 使用哨兵值并不理想,但在您充分了解数据并知道哨兵不会干扰您的计算的情况下就足够了。例如,如果您知道您的值(不仅仅是“应该”)始终“&gt;= 0”,那么使用负标记是可以接受的(除非您正在执行的操作的结果可能与输入具有不同的符号) ,例如“-1 * -1”)。如果您正在编写一个框架并最终使用哨兵,那么您可能应该允许用户在单个操作的基础上选择该值。再说一次,_不理想_。 (2认同)