gpt4 book ai didi

clojure - NumPy 和 Clojure/Java 之间的 float 差异

转载 作者:行者123 更新时间:2023-12-02 17:04:21 25 4
gpt4 key购买 nike

有人对如何使用 java 或 clojure 从二进制文件中读取浮点值有任何建议吗?我将当前值与 Python 的 NumPy 的 nump.fromfile('path', dtype="f") 方法的结果进行比较,但我根本没有得到相同的答案。我怀疑这是因为Java的DataInputStream.readFloat()方法假设二进制文件是由java编写的,如this documentation显示:

Reads four input bytes and returns a float value. It does this by first constructing an int value in exactly the manner of the readInt method, then converting this int value to a float in exactly the manner of the method Float.intBitsToFloat. This method is suitable for reading bytes written by the writeFloat method of interface DataOutput.

所以,我认为java正在向后读取浮点值。前十二个字节是:

(0 -64 121 -60 0 -64 121 -60 0 -64 121 -60)

Clojure/java 将此视为重复的 1.7676097E-38,而 NumPy 和 Python 将其视为重复的 -999.0。作为引用,我正在使用 this dataset .

最佳答案

Java 在 java.io 中使用“网络顺序”(大端)。但是 java.nio 允许您选择要应用的字节顺序:

user=> (-> (map byte [0 -64 121 -60]) byte-array java.nio.ByteBuffer/wrap 
(.order java.nio.ByteOrder/LITTLE_ENDIAN) .getFloat)
-999.0

下一步是读取字节数组中的整个文件,或者从 FileInputStream 创建一个 FileChannel,然后映射它并从结果中读取使用 .getFloat 映射 ByteBuffer

关于clojure - NumPy 和 Clojure/Java 之间的 float 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4860218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com