玩转 Java 与 Python 交互,JEP 库来助力
文章目录
- 玩转 Java 与 Python 交互,JEP 库来助力
- 一、背景介绍
- 二、JEP 库是什么?
- 三、如何安装 JEP 库?
- 四、JEP 库的简单使用方法
- 五、JEP 库的实际应用场景
- 场景 1:数据处理
- 场景 2:机器学习
- 场景 3:科学计算
- 场景 4:图像处理
- 场景 5:网络爬虫
- 六、常见问题及解决方案
- 问题 1:`ModuleNotFoundError`
- 问题 2:`SyntaxError`
- 问题 3:`NameError`
- 七、总结
玩转 Java 与 Python 交互,JEP 库来助力
一、背景介绍
在开发过程中,我们常常会遇到需要结合 Java 和 Python 的场景。Java 以其高性能和稳定性著称,而 Python
则以其灵活性和丰富的库生态受到青睐。如果能将两者的优点结合起来,将大大提升开发效率和项目性能。JEP(Java Embedded
Python)库正是为了解决这一需求而诞生的。它提供了 Java 与 Python 之间的无缝交互能力,使得开发者可以在 Java 中直接调用 Python
代码,或者在 Python 中使用 Java 的功能。接下来,我们将深入介绍 JEP 库的使用方法和实际应用场景。
二、JEP 库是什么?
JEP 是一个第三方库,旨在实现 Java 和 Python 之间的高效交互。它通过提供一个嵌入式 Python 解释器,使得 Java 程序可以调用
Python 代码,同时也可以在 Python 中访问 Java
的类和方法。这种双向交互能力,使得开发者可以充分利用两种语言的优势,构建更加灵活和高效的系统。
三、如何安装 JEP 库?
JEP 是一个第三方库,可以通过以下命令行安装:
bash复制
python -m pip install jep
如果需要使用 NumPy 等 Python 库,也可以一并安装:
bash复制
python -m pip install numpy
安装完成后,即可在 Java 项目中使用 JEP 库。
四、JEP 库的简单使用方法
以下是 JEP 库中常用的五个函数及其使用方法:
Interpreter类:用于创建一个 Python 解释器实例。
java复制
Interpreter interp = new SharedInterpreter();* 该类是 JEP 的核心,用于执行 Python 代码。
runScript方法:用于执行 Python 脚本。
java复制
interp.runScript("print('Hello from Python!')");* 该方法可以直接执行 Python 代码,适用于简单的脚本运行。
parseExpression方法:用于解析 Python 表达式。
java复制
interp.parseExpression("2 + 3 * 4");* 该方法可以解析复杂的数学表达式,并返回结果。
getValue方法:用于获取 Python 变量的值。
java复制
double result = interp.getValue("2 + 3 * 4");* 该方法可以获取 Python 表达式的计算结果。
setVarValue方法:用于设置 Python 变量的值。
java复制
interp.setVarValue("x", 10);* 该方法可以将 Java 中的值传递给 Python 变量,方便在 Python 中使用。
五、JEP 库的实际应用场景
以下是 JEP 库在不同场景下的使用示例:
场景 1:数据处理
在 Java 中调用 Python 的 NumPy 库进行数据处理:
java复制
Interpreter interp = new SharedInterpreter();
interp.runScript("import numpy as np");
interp.runScript("arr = np.array([1, 2, 3, 4, 5])");
NDArray<?> arr = (NDArray<?>) interp.getValue("arr");
System.out.println(arr.getData());
- 该示例展示了如何在 Java 中使用 Python 的 NumPy 库进行数组操作。
场景 2:机器学习
在 Java 中调用 Python 的 scikit-learn 库进行机器学习:
java复制
interp.runScript("from sklearn.linear_model import LinearRegression");
interp.runScript("model = LinearRegression()");
interp.runScript("X = [[1, 1], [1, 2], [2, 2], [2, 3]]");
interp.runScript("y = [6, 8, 9, 11]");
interp.runScript("model.fit(X, y)");
double prediction = (double) interp.getValue("model.predict([[3, 4]])");
System.out.println("Prediction: " + prediction);
- 该示例展示了如何在 Java 中使用 Python 的机器学习库进行模型训练和预测。
场景 3:科学计算
在 Java 中调用 Python 的 SciPy 库进行科学计算:
java复制
interp.runScript("from scipy.integrate import quad");
interp.runScript("result, error = quad(lambda x: x**2, 0, 1)");
double result = (double) interp.getValue("result");
System.out.println("Integral result: " + result);
- 该示例展示了如何在 Java 中使用 Python 的 SciPy 库进行积分计算。
场景 4:图像处理
在 Java 中调用 Python 的 OpenCV 库进行图像处理:
java复制
interp.runScript("import cv2");
interp.runScript("img = cv2.imread('image.jpg')");
interp.runScript("gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)");
interp.runScript("cv2.imwrite('gray_image.jpg', gray)");
- 该示例展示了如何在 Java 中使用 Python 的 OpenCV 库进行图像灰度转换。
场景 5:网络爬虫
在 Java 中调用 Python 的 requests 和 BeautifulSoup 库进行网络爬虫:
java复制
interp.runScript("import requests");
interp.runScript("from bs4 import BeautifulSoup");
interp.runScript("response = requests.get('https://example.com')");
interp.runScript("soup = BeautifulSoup(response.text, 'html.parser')");
interp.runScript("titles = [title.get_text() for title in soup.find_all('h1')]");
List<String> titles = (List<String>) interp.getValue("titles");
System.out.println("Titles: " + titles);
- 该示例展示了如何在 Java 中使用 Python 的网络爬虫库获取网页标题。
六、常见问题及解决方案
以下是使用 JEP 库时常见的三个问题及其解决方案:
问题 1:ModuleNotFoundError
错误信息 :
ModuleNotFoundError: No module named 'numpy'
解决方案 : 确保在安装 JEP 库时,也安装了所需的 Python 库,例如 NumPy:
bash复制
python -m pip install numpy
如果问题仍然存在,可以在 Python 脚本中手动安装:
java复制
interp.runScript("import sys");
interp.runScript("sys.path.append('/path/to/numpy')");
问题 2:SyntaxError
错误信息 :
SyntaxError: invalid syntax
解决方案 : 检查 Python 代码的语法是否正确,确保代码符合 Python 的语法规则。如果代码较长,可以使用 Python
的调试工具进行检查。
问题 3:NameError
错误信息 :
NameError: name 'x' is not defined
解决方案 : 确保在使用变量之前,已经正确地定义了该变量。例如:
java复制
interp.setVarValue("x", 10);
interp.runScript("print(x)");
七、总结
JEP 库为 Java 和 Python 之间的交互提供了一个强大的工具。通过 JEP,开发者可以在 Java 中轻松调用 Python 代码,充分利用
Python 的丰富库生态,同时保持 Java 的高性能和稳定性。无论是数据处理、机器学习、科学计算还是网络爬虫,JEP
都能提供高效的解决方案。希望本文能帮助你更好地理解和使用 JEP 库,提升你的开发效率。
如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!
相关文章:
玩转 Java 与 Python 交互,JEP 库来助力
文章目录 玩转 Java 与 Python 交互,JEP 库来助力一、背景介绍二、JEP 库是什么?三、如何安装 JEP 库?四、JEP 库的简单使用方法五、JEP 库的实际应用场景场景 1:数据处理场景 2:机器学习场景 3:科学计算场…...
鸿蒙学习-
鸿蒙数据传值 //* 传值 //* State /**State创建一个响应式的数据,但不是所有的更改都会引起刷新,只有被框架观察到的修改才会被刷新UI* 1. 基本数据类型如 number string boolean等值的变化修改* 2. Object类型,只会观察到第一层的数据变化或…...
list结构刨析与模拟实现
目录 1.引言 2.C模拟实现 2.1模拟实现结点 2.2模拟实现list前序 1)构造函数 2)push_back函数 2.3模拟实现迭代器 1)iterator 构造函数和析构函数: *操作符重载函数: 前置/后置/--: /!操作符重载…...
机器人部分专业课
华东理工 人工智能与机器人导论 Introduction of Artificial Intelligence and Robots 必修 考查 0.5 8 8 0 1 16477012 程序设计基础 The Fundamentals of Programming 必修 考试 3 64 32 32 1 47450012 算法与数据结构 Algorithm and Data Structure 必修 考试 3 56 40 …...
流行粗野主义几何风现代曲线标题logo设计psai无衬线英文字体安装包 Mortend – Extended Family
介绍我们名为 Mortend 的新探索,这是一个强大的扩展字体系列。Mortend 的设计具有几何形状、大胆、强烈的曲线和现代感。灵感来自当今流行的粗野主义海报和极简主义设计,让您有更多机会表达您的创造力。这个字体系列带来了强烈的感觉而优雅的外观&#x…...
前端常见面试题-2025
vue4.0 Vue.js 4.0 是在 2021 年 9 月发布。Vue.js 4.0 是 Vue.js 的一个重要版本,引入了许多新特性和改进,旨在提升开发者的体验和性能。以下是一些关键的更新和新特性: Composition API 重构:Vue 3 引入了 Composition API 作为…...
高通Camera点亮3——Camera Module
Camera点亮除了Sensor之外还需要配置module、EEPROM等,multicamera;配置好编译设置。 Module <?xml version"1.0" encoding"utf-8" ?> <cameraModuleData<!--Module group can contain either 1 module or 2 modules…...
学习路程二 LangChain基本介绍
前面简单调用了一下deepseek的方法,发现有一些疑问和繁琐的问题,需要更多的学习,然后比较流行的就是LangChain这个东西了。 目前大部分企业都是基于 LangChain 、qwen-Agent、lammaIndex框架进行大模型应用开发。LangChain 提供了 Chain、To…...
Docker-技术架构演进之路
目录 一、概述 常见概念 二、架构演进 1.单机架构 2.应用数据分离架构 3.应用服务集群架构 4.读写分离 / 主从分离架构 5.引入缓存 —— 冷热分离架构 6.垂直分库 7.业务拆分 —— 微服务 8.容器化引入——容器编排架构 三、尾声 一、概述 在进行技术学习过程中&am…...
API接口设计模式:从分层架构到CQRS的实战应用
以下将从分层架构和 CQRS(命令查询职责分离)的基本概念入手,为你阐述从分层架构到 CQRS 的实战应用相关内容: 分层架构 概念:分层架构是将系统按照功能划分为不同的层次,每个层次负责特定的职责,…...
【机器学习】【KMeans聚类分析实战】用户分群聚类详解——SSE、CH 指数、SC全解析,实战电信客户分群案例
1.引言 在实际数据分析中,聚类算法常用于客户分群、图像分割等场景。如何确定聚类数 k 是聚类分析中的关键问题之一。本文将以“用户分群”为例,展示如何通过 KMeans 聚类,利用 SSE(误差平方和,也称 Inertiaÿ…...
【C++】 时间库chrono计算程序运行时间
C 时间库chrono计算程序运行时间 本文总结了chrono库的引入方法以及计算程序片段运行时间的方法 一、chrono库的引入方法(注意事项) 首先chrono是属于std命名空间的。 所以在程序中应该这样包含头文件: #include <chrono> using n…...
PCL 边界体积层次结构(Boundary Volume Hierarchy, BVH)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 边界体积层次结构(Boundary Volume Hierarchy, BVH) 是一种高效的空间数据结构,广泛应用于计算机图形学、计算机视觉、机器人学、物理仿真等领域。它的核心思想是通过将空间递归地划分为层次化的包围体(通常是轴…...
算法随笔_58: 队列中可以看到的人数
上一篇:算法随笔_57 : 游戏中弱角色的数量-CSDN博客 题目描述如下: 有 n 个人排成一个队列,从左到右 编号为 0 到 n - 1 。给你以一个整数数组 heights ,每个整数 互不相同,heights[i] 表示第 i 个人的高度。 一个人能 看到 他右边另一个人…...
创建React项目的三个方式
创建React项目 创建一个React项目非常简单,通常有几种方法可以进行,下面是最常见的几种方法: 1. 使用 create-react-app (已经不被推荐了) create-react-app 是一个官方的脚手架工具,用于快速创建 React 项目。它会为你配置好很…...
QT闲记-工具栏
工具栏通常用来放置常用的操作按钮,如QPushButton,QAction等。可以放置在顶部,底部,左侧,右侧,并且支持拖曳,浮动。 1、创建工具栏 通常通过QMainWindow 提供的addToolBar()来创建,它跟菜单栏一样,如果需要工具栏,一般情况下,我们设置这个类的基类为QMainWindow。 …...
为什么继电器要加一个反向并联一个二极管
1 动感就是电流不突变 2 为什么有的继电器上面要反向并联一个二极管和电阻 1 并联二极管是为消除掉动感产生的高压 2 加上二极管是为了让继电器更快的断开(二极管选型的工作电流要大于动感电流,开关要够快) 3 公式:二极管压降0…...
【Leetcode 每日一题 - 扩展】1512. 好数对的数目
问题背景 给你一个整数数组 n u m s nums nums。 如果一组数字 ( i , j ) (i,j) (i,j) 满足 n u m s [ i ] n u m s [ j ] nums[i] nums[j] nums[i]nums[j] 且 i < j i < j i<j,就可以认为这是一组 好数对 。 返回好数对的数目。 数据约束 1 ≤ n …...
vue3 采用xlsx库实现本地上传excel文件,前端解析为Json数据
需求:本地上传excel 文件,但需要对excel 文件的内容进行解析,然后展示出来 1. 安装依赖 首先,确保安装了 xlsx 库: bash复制 npm install xlsx 2. 创建 Vue 组件 创建一个 Vue 组件(如 ExcelUpload.v…...
计算机视觉:经典数据格式(VOC、YOLO、COCO)解析与转换(附代码)
第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络(附代码) 第五章࿱…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
