Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Matlab列数组转换为Java数组:换位问题_Java_Arrays_Matlab_Matrix - Fatal编程技术网

将Matlab列数组转换为Java数组:换位问题

将Matlab列数组转换为Java数组:换位问题,java,arrays,matlab,matrix,Java,Arrays,Matlab,Matrix,我知道这个标题不是很清楚,所以我将尽我所能在这里解释情况 我有一个Matlab数组,比如:array=[1,2;3,4]。所以基本上这是一个4x4矩阵 我有一个java类,其目标是将matlab矩阵转换为java数组。此类有两个构造函数: MatlabArray( double[] array ); MatlabArray( double[][] array ); 这个类有一个成员来存储数组值: double[][] values 该课程在使用matlab矩阵(两种大小均大于1)、matla

我知道这个标题不是很清楚,所以我将尽我所能在这里解释情况

我有一个Matlab数组,比如:
array=[1,2;3,4]
。所以基本上这是一个4x4矩阵

我有一个java类,其目标是将matlab矩阵转换为java数组。此类有两个构造函数:

MatlabArray( double[] array );
MatlabArray( double[][] array );
这个类有一个成员来存储数组值:

double[][] values
该课程在使用matlab矩阵(两种大小均大于1)、matlab单例(1x1)和matlab行(1x2、1x5等)时效果非常好

但对于列矩阵,这里有一个缺点,基本上一条直线或一个列矩阵仍然是一个二维数组,它的一个维度是1

当调用java构造函数时,被调用的构造函数最终是:

MatlabArray( double[] array );
这会导致java数组变成一个线矩阵。假设我有以下Matlab矩阵:
array=[1;2;3;4]
,那么转换后的java数组将是
array={1,2,3,4}

失去一致性会导致以后的崩溃,因为用于访问不同数组中的值的索引不再匹配

以前我们有一个变通办法(人们知道这个问题何时出现,他们正在反转索引)。解决办法,我当然摆脱了

我正在寻找以一种优雅的方式解决这个问题的方法,我可以在构造函数中指定维度,但我宁愿避免这样做


感谢您的帮助

您的构造函数“MatlabArray(double[]array)”应该依次调用MatlabArray(double[]array)。我认为这应该回答你的问题。那么你是在问如何做到这一点吗?实际上它已经做到了,但它并没有解决问题:如何区分1 x n矩阵和n x 1矩阵,因为它们都以双[]的形式出现在第一个构造函数中?那么你需要区分列矩阵(n×1)和matlab行(1×n)吗?你在问如何以优雅的方式实现它?如果是这样的话,更简单但优雅的方式不会迫使你改变你的数据模型,那就是在你的double[]构造函数中添加第二个参数;只有两个选项的枚举:enum.Line和enum.Column。这是我希望避免的一种可能性,因为它迫使开发人员在调用Matlab中的构造函数之前进行测试(矩阵也可以是m x n)。虽然这些测试可以集中进行,但有些人会复制它。此外,我注意到调用函数对matlab端的性能有很大的影响。由于转换函数是高度递归的,我们决定在一个函数中例外地实现它(性能范围在250到1550倍之间…)。