Numpy 传递NumPy数组到JPype

传递NumPy数组到JPype,本章我们将启动一个Java虚拟机(JVM),并把一个NumPy数组发送到JVM。我们将使用标准的Java调用语法把接收到的数组打印出来。当然,你需要提前安装好Java

具体步骤

首先,我们需要在JPype中启动JVM。

  1. 启动JVM。

JPype可以方便地找到默认的JVM路径。

jpype.startJVM(jpype.getDefaultJVMPath())
  1. 打印hello world

出于对传统的尊重,先打印hello world

jpype.java.lang.System.out.println("hello world")
  1. 传递NumPy数组。

创建一个NumPy数组,把它转换为Python列表并传递给JPype。之后就可以轻松打印出各个数组元素。

values = numpy.arange(7)
java_array = jpype.JArray 
     (jpype.JDouble, 1)(values.tolist())

for item in java_array:
    jpype.java.lang.System.out.println(item)
  1. 关闭JVM。

所有的事情都完成后,关闭JVM。

jpype.shutdownJVM()

在JPype中,任何时刻都只能有一个JVM正在运行。如果忘记关闭JVM,有可能导致意想不到的错误。程序的输出如下。

hello world
    0.0
    1.0
    2.0
    3.0
    4.0
    5.0
    6.0
    JVM activity report     :
        classes loaded       : 31
    JVM has been shutdown

本章的完整代码如下。

import jpype
import numpy

#1. 启动JVM
jpype.startJVM(jpype.getDefaultJVMPath())

#2. 打印hello world
jpype.java.lang.System.out.println("hello world")

#3. 传递NumPy数组
values = numpy.arange(7)
java_array = jpype.JArray(jpype.JDouble, 1)(values.tolist())

for item in java_array:
    jpype.java.lang.System.out.println(item)

#4. 关闭JVM
jpype.shutdownJVM()

小结

JPype允许我们启动和停止一个Java虚拟机。JPype提供了对标准Java API调用的封装。本例中,我们通过使用JArray封装,可以把Python列表传递到JVM并转换为Java数组。JPype使用了Java本地接口(JNI)。JNI实现了本地原生C语言代码和Java之间的桥接。遗憾的是,使用JNI会导致软件性能降低,因此使用JPype的时候要考虑到这一点。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程