java - 如何在 Kotlin/Java 中对 Numpy 数组(Python)进行 base64 解码?

标签 java python numpy kotlin base64

当然,有更好/安全的选项来传输/存储数据,但我们假设我们绑定(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/

相关文章:

Python 上下文无关语法和 PCFG 生成基准?

python - 在 Python 中评估的 if 语句的顺序是什么

NumPy 和 SciPy。静态与动态加载

java - 当我尝试缓冲字符串时,我的代码中哪里搞砸了?

java - [作业][Java] 找出 5 个整数输入中最大的数字组合?

在装饰器中实现的 Python 静态变量不会重置

Python 等效于 MATLAB 的 "ismember"函数

python - 效率与可读性 : obfuscation when using nested boolean index arrays

java - 我们应该遍历 map 吗?为什么?

java - Java 中确定列表/数组是否实际上是重复的较小数组的好方法