java调用matlab 数组_JAVA调用matlab程序 输入输出数据转换
JAVA调用matlab程序 输入输出数据转换
JAVA 程序调用 matlab函数(matlab导出jar包里的函数)、JAVA解析matlab返回数据时,机器需要先安装matlab运行时环境 并 在java工程中导入运行时环境提供的javabuilder.jar用于数据类型的转换。
java工程中导入从matlab导出的jar文件。
函数调用
a. 传入函数的JAVA变量先转换为运行时环境里的对象
例如:JAVA double对象转 matlab double对象(传入函数的实际是运行时环境提供的中间类型)
double params= 0.2d;
MWNumericArray p1 = new MWNumericArray(params, MWClassID.DOUBLE);
b. 函数调用
//封装实参为函数接受的类型
Object[] inputs = new Object[5];
MWNumericArray p1 = new MWNumericArray(params, MWClassID.DOUBLE);
input[1]=p1;
····
//实例化matlab函数入口对象,调用函数
//传入的第一个参数是指定函数返回值数量(必须严格和实际返回值数量一致),第二个参数开始是实参列表(本例中实参封装为Object数组传入)
//函数返回 在Object数组 result 中
ClassSimple simple= new ClassSimple();
Object[] result = simple.XXXX(5, inputs);
matlab函数返回数据解析
目前,项目使用到并成功实现转换的数据类型有 元胞数组、双精度型数据、字符型数据。 最小粒度的数据为双精度型数据、字符型数据,经过元胞数组的封装和嵌套 返回。转换过程中,确认不能转换的数据类型有 table、日期时间型、日期长度型、时间日期向量。
Object res1= result[0];
//先将数据类型强制类型转换为MWCellArray
MWCellArray cellArray = (MWCellArray) res1;
//cellArray.numberOfElements() 获取元胞数组中元素总个数
//MWCellArray 相当于把表格数据纵向一维展开, 每一列的数据是相连的 而封装java对象要抽出一行的数据
//元素总个数除以列数(表具有的字段数)得到行数
int rowNum= cellArray.numberOfElements() / columnNum;
for (int i = 1; i <= rowNum; i++) {
Bean bean= new Bean();
//解析字符型数据
bean.setName(String.valueOf(((char[][]) cellArray.get(i))[0]));
//解析双精度型数据
bean.setWeight(((double[][]) cellArray.get(rowNum+ i))[0][0]);
System.err.println(bean);
}
字符型数据的转换
确认元胞数组 cellArray 的第i 个元素对应字符型数据(可以先输出第i个元素的类名查看 字符型数据对应的Class的SimpleName为char[][])后,
通过
String.valueOf(((char[][]) cellArray.get(i))[0]);
转换为String;
双精度型数据的转换
确认元胞数组cellArray 的第j 个元素对应双精度型数据(对应SimpleName为double[][])后,
通过
((double[][]) cellArray.get(j))[0][0];
即可取出该位置的数据;
元胞数组嵌套时的数据转换
确认元胞数组cellArray 的第k个元素为元胞数组类型(对应SimpleName为MWArray)后,
通过
MWArray array= cellArray.getCell(k);
即可取出该位置的元胞数组,再次解析即可,例如:
for (int j = 1; j <= array.numberOfElements(); j++) {
String.valueOf(((char[][]) array.get(j))[0]);
}
注意事项:
1. 运行时环境里的元胞数组 **下标从1开始** 下标为0 报错;
2. MWCellArray 相当于把表格数据纵向一维展开, 每一列的数据是相连的 而封装java对象要抽出一行的数据;
3. 成功实现转换的数据类型有 元胞数组、双精度型数据、字符型数据; 确认不能转换的数据类型有 table、日期时间型、日期长度型、时间日期向量;
4. 从元胞数组中获取元胞数组是使用cellArray.getCell(),使用cellArray.get()有时候报错。
java调用matlab 数组_JAVA调用matlab程序 输入输出数据转换相关推荐
- java 调用方法 数组_JAVA方法与数组
一.JAVA的方法: 1.定义:a.java方法是语句的集合,它们在一起执行一个功能. b.方法是解决一类问题的步骤的有序组合. c.方法包含于类或对象中. d.方法在程序中被创建,在其他地方被引用. ...
- java 静态对象数组_Java静态方法和实例方法 java中的数组作为形参传入
原标题:Java静态方法和实例方法 java中的数组作为形参传入 Java静态方法和实例方法 java中的数组作为形参传入 Java虚拟机 启动一个Java程序的时候,会诞生一个虚拟机实例,当程序关闭 ...
- java 二维数组内存溢出_程序员:学习心得,Java内存区域,内存溢出异常
Java 内存区域 Heap 线程公有 存放实例对象 是GC主要管理区域,因此可以更细致的划分为:新生代.老年代 再细致一点划分:Eden区.From Survivor区.To Survivor区 内 ...
- matlab 数组 组成 矩阵,MATLAB矩阵与数组
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 MATLAB既然以矩阵实验室命名,就说明该软件在矩阵计算方面具有非常优异的表现.在MATLAB中,一般情况下一个矩阵就是指一个长方形的数组.特殊情况有两个 ...
- java list转数组_java list 转数组
java怎么把list转成数组 public static void listToarray() { List list = new ArrayList(); list.add("a&quo ...
- java 定义整数数组_JAVA中数组的正确定义方法是什么?
数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来唯一地确定数组中的元素. §5.1一维数组 一.一维数组的定义 type arrayName[]; 其中类型(type)可以为Java中任 ...
- java怎么返回数组_java方法怎么返回数组
java方法返回数组的方法:在方法前添加int[]即可返回一维的整型数组.如果在方法前添加int[][],则可以返回二维的整型数组. Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还 ...
- java大括号定义数组_Java基础语法_数组
数组的概念 数组的概念:是一种容器,可以同时存放多个数据值 数组的特点: 1.数组是一种引用数据类型 2.数组当中的多个数据,类型必须统一 3.数组的长幅在程序运行期间不可改变 数组的定义格式 数组的 ...
- java生成随机数组_JAVA生成随机数组10个数字并求和
JAVA生成随机数组10个数字并求和 本文最终结果大概是这样的',使用java技术随机生成10个数,然后填充一个数组并在消息框中显示数组内容,接着对数组求和输出,将结果显示在消息框中. 设计思路:可以 ...
最新文章
- Qt之对话框设计——淡入淡出效果
- 视频专辑:轻松学习flash动画制作视频教程
- 程序员应该多逛的几个技术网站
- [ASP.NET AJAX]类似.NET框架的JavaScript扩展
- 使用js简单实现javaMap
- C语言---关于关键字const与static的简单理解
- SpringCloud学习笔记028---在SpringBoot中整合多数据源_实战项目
- IDEA 创建git 分支 拉取分支
- Hadoop I/O
- Vue.js 2.0从入门到放弃---入门实例(二)
- android使用protobuf实现网络订单管理功能
- 硬件设计论坛_疫情让硬件教育迎百年巨变 EDA365 电子论坛成为主角
- python math模块详解
- 内存颗粒位宽和容量_DDR4内存终极解析(一)--DDR4内存颗粒
- 【数据结构】串(定长顺序串、堆串、块链串)的存储结构及基本运算(C语言)
- 力扣刷题 DAY_61 回溯
- 招聘计算机教师面试自我介绍,[教师招聘面试自我介绍]怎么在教师招聘时自我介绍...
- Python核心编程(第3版)第2章网络编程中关于tcp/udp服务器和客户端实现代码的运行出错的修正
- GoogleMap的简单用法
- 回头再说--跳蚤效应