当然,有更好/安全的选项来传输/存储数据,但我们假设我们绑定(bind)到这种表示。
以下 Python 代码将 Numpy 数组转换为 Base64:
import base64
import numpy as np
arr = np.array([1.1, 2.2, 3.3], dtype=np.float32)
print(base64.b64encode(arr).decode("ascii"))
输出:
zcyMP83MDEAzM1NA
使用 Kotlin 我想转换回原来的
float
值(value)观:import java.io.ByteArrayInputStream
import java.io.DataInputStream
import java.util.*
fun main() {
val buffer = Base64.getDecoder().decode("zcyMP83MDEAzM1NA")
val ds = DataInputStream(ByteArrayInputStream(buffer))
val arr = FloatArray(buffer.size / 4)
for (i in arr.indices) {
arr[i] = ds.readFloat()
}
println(arr.contentToString())
}
然而,输出并不像预期的那样,即
[1.1, 2.2, 3.3]
,但改为以下内容:[-4.28967904E8, -4.2791936E8, 4.17524E-8]
我在这里有什么错误?
最佳答案
所以,闲聊,我很确定与字节序有关,考虑:
>>> import numpy as np
>>> arr = np.array([1.1, 2.2, 3.3], dtype=np.float32)
>>> arr
array([1.1, 2.2, 3.3], dtype=float32)
>>> arr.byteswap()
array([-4.2896790e+08, -4.2791936e+08, 4.1752401e-08], dtype=float32)
因此,在 Python 方面,您可以使用:
base64.b64encode(arr.byteswap())
关于java - 如何在 Kotlin/Java 中对 Numpy 数组(Python)进行 base64 解码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60966791/