【问题标题】:Is there a faster way to pass python numpy to java array in JPype有没有更快的方法将 python numpy 传递给 JPype 中的 java 数组
【发布时间】:2019-12-13 02:43:48
【问题描述】:

有没有更好的方法将一个大的 numpy 数组传递给 JPype 中的 java 数组,并且内存成本低?

因为 numpy 中的数据太大了,确实需要很长时间,也很消耗内存。 我也想节省内存,在用户指南中搜索后,它说'你可以使用包装器预先转换一次,然后传入包装器'。但我还是不知道。

用户指南:https://jpype.readthedocs.io/en/latest/userguide.html#performance

提前致谢。

// Java code
public class Demo{
    public int myfit(double [][] trainData){
        // do some things
    }
    public static void main(String[] args) {
        // ...
    }
}
# Python code
import jpype
import numpy as np
jpype.startJVM(jpype.getDefaultJVMPath())

Demo = jpype.JClass('Demo')
demo = Demo()
# some codes...

train_data = a big numpy array
demo.myfit(train_data)

# shutdown jvm
jpype.shutdownJVM()

【问题讨论】:

    标签: java python arrays numpy jpype


    【解决方案1】:

    预转换意味着创建一系列jpype.JArray(jpype.JDouble)jpype.JArray(jpype.JDouble,2) 结构,将数据复制到数组中。当它找到内存视图接口时,应该有一个优化的填充例程,用于将数据从 numpy 传输到 Java 一次,但它不会将其报告为 JPype 项目的问题。虽然我目前主要将其用于一维数据,但我并没有过多关注多维版本。

    如果您需要多次将数组传递给 Java,这将降低成本。如果您只计划传输一次数据,那么更好的解决方案是编写一个 Java 支持类,直接从磁盘加载数据,以便对象直接出现在 Java 中,而不必首先存储在 Python 中。

    【讨论】:

      猜你喜欢
      • 2011-08-31
      • 1970-01-01
      • 2012-11-18
      • 2021-01-08
      • 2019-11-14
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      相关资源
      最近更新 更多