Java程序命令行调用Python矩阵算法
前言
- 首先我们来了解一下什么是矩阵 也就是我们常说的二维数组 矩阵运算也就是我们常说的加减乘除
- 如何实现java调用xxx.py
方式
- 使用Jython 注意:目前支持到Python 2.7 ,并不完全支持所有的Python标准库和第三方库,特别是依赖于C扩展的库
- 网络通讯如http python(Flask)提供http接口 Java通过 http请求调用
- 命令行 java通过ProcessBuilder或者Runtime.getRuntime.exec()这个类进行调用python脚本
- 使用Py4J网关
- 消息队列 Java程序发布消息 Python订阅消息并进行矩阵运算
- RPC
技术
- Java
- Python
- fastjson2
详细案例
- 创建一个maven项目
- 添加fastjson2依赖
<dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.46</version> </dependency>
- 编写matrix_opration.py脚本
import sys import json from turtledemo.paint import switchupdown import numpy as np # 加 def add(matrixA, matrixB): return np.add(matrixA,matrixB).tolist() # 减 def sub(matrixA, matrixB): return np.subtract(matrixA,matrixB).tolist() # 乘 def mul(matrixA, matrixB): return np.dot(matrixA,matrixB).tolist() # 除 def div(matrixA, matrixB): return np.divide(matrixA,matrixB).tolist() if __name__ == '__main__': if len(sys.argv) != 4: print('usage: python matrix_opration.py <matrixA> <matrixB>') sys.exit(1) jsonA = sys.argv[1] jsonB = sys.argv[2] # 控制使用哪个算法 num = int(sys.argv[3]) try: matrixA = np.array(json.loads(jsonA)) matrixB = np.array(json.loads(jsonB)) if num == 0: result = add(matrixA, matrixB) elif num == 1: result = sub(matrixA, matrixB) elif num == 2: result = mul(matrixA, matrixB) else: result = div(matrixA, matrixB) print(json.dumps(result)) except Exception as e: print(f"Error processing matrices: {e}", file=sys.stderr) sys.exit(1)
- 编写Java端 MatrixMultiplication.java
package com.demo; import com.alibaba.fastjson2.JSON; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Scanner; /** * @Program: Default (Template) Project * @ClassName MatrixMultiplication * @Author: liutao * @Description: 矩阵运算客户端 * @Create: 2025-01-02 21:09 * @Version 1.0 **/ public class MatrixMultiplication { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 定义矩阵 int[][] matrixA = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int[][] matrixB = {{9, 8, 7}, {6, 5, 4}, {3, 2, 1}}; String jsonMatrixA = JSON.toJSONString(matrixA); String jsonMatrixB = JSON.toJSONString(matrixB); System.out.println("请输入py文件path:"); String pyScriptPath = sc.next(); System.out.println("请选择矩阵算法:(0:加、1:减、2:乘、3:除)"); String algorithm = sc.next(); // 构建命令行调用py文件 ProcessBuilder processBuilder = new ProcessBuilder("python",pyScriptPath,jsonMatrixA,jsonMatrixB,algorithm); processBuilder.redirectErrorStream(true); try{ Process process = processBuilder.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); StringBuilder output = new StringBuilder(); String line; while ((line = reader.readLine())!= null) { output.append(line).append("\n"); } int exitCode = process.waitFor(); System.out.println("Exited code " + exitCode); if(exitCode == 0){ int[][] result = JSON.parseObject(output.toString().trim(),int[][].class); System.out.println("Matrix result:"); for (int[] row:result) { System.out.println(Arrays.toString(row)); } System.out.println("Python 脚本执行成功"); } else { System.err.println("Python 脚本执行失败"); System.out.println("output:"+output); } }catch(Exception e){ e.printStackTrace(); } } }
测试
1、在idea配置环境变量
2、调用程序 实现运算
3、打包程序并通过java -jar xxx.jar 命令运行程序
结尾
到这里就结束了
欢迎点赞 关注 打赏 三联
阅读剩余
版权声明:
作者:涛哥
链接:https://ltbk.net/back/java/article/2010.html
文章版权归作者所有,未经允许请勿转载。
作者:涛哥
链接:https://ltbk.net/back/java/article/2010.html
文章版权归作者所有,未经允许请勿转载。
THE END