NaN 值如何以简单的 Numpy 文件格式表示?

How are NaN values represented in the simple Numpy file format?

我正在用 JVM 语言编写一个程序,该程序以 numpy 简单文件格式存储 Double[] 的数组,描述为 here。然后我使用

将这些读入 ndarray
np.readstring(str,dtype="float64")

撇开字节序不谈,这很好用,因为 Java 和 Numpy 使用相同的 IEEE 标准来存储双精度值。它似乎也可以毫无问题地与 int32 一起使用。我的问题是,1) 如何在 Java 端存储 NaN 值? 2) 更一般地说,NaNs 在上面链接的 numpy 简单文件格式中是如何表示的?

documentation for java.lang.Double.NaN说的是

A constant holding a Not-a-Number (NaN) value of type double. It is equivalent to the value returned by Double.longBitsToDouble(0x7ff8000000000000L).

(那部分无耻地从this answer中抄袭)

直接回答您的问题:

  1. NaN 将像 Java 侧的任何其他双精度一样存储。
  2. 作为您 link 谈论以原始二进制形式对值进行编码的规范,我认为您可以像其他任何值一样将该值放入文件中。

我认为真正有趣的问题是 - 如果在 python 中将其加载到 numpy 中,numpy 将如何解释该值?

相信 答案是它也会将其解释为 NaN,因为它符合与 Java 相同的 IEEE 浮点数规范。但是 - 我会先尝试一个小的测试示例来检查它。