【问题标题】:MATLAB code into JAVA 3 dimensional arrays within for loops将 MATLAB 代码转换为 for 循环内的 JAVA 3 维数组
【发布时间】:2014-08-02 11:23:18
【问题描述】:

我在一个 MATLAB 程序中有以下代码,它在 for 循环中创建三个 3 维数组,我试图在我的 JAVA 程序中复制它。

MATLAB代码如下:

for j = 1 : J
    for k = 1 : K

    A(j,:,k) = VariableA * ArrayB
    B(j,:,k) = VariableA ./ ArrayB
    AB(j,:,k) = A.*B

    end
 end

在 JAVA 中,我已经初始化了将通过代码使用的数组:

  double [][][] A = new double [(int) (J)][(int) (N+1)][(int)(K)];
  double [][][] B = new double [(int) (J)][(int) (N+1)][(int)(K)];
  double [][][] AB = new double [(int) (J)][(int) (N+1)][(int)(K)];

请注意,在 MATLAB 和 JAVA 程序中,所有变量均在此部分代码之前定义。此外,VariableA 是一个定义的值,即 10,而 ArrayB 是一个一维行数组,即 [1 2 3 4 5 6 7]。

我在JAVA中创建A的代码(我对B和AB使用了同样的方法)是:

 for (int j = 0; j < A.length; j++)
         for ( int i = 0; i < A.length; i++)
             for (int k = 0; k < A.length; k++)

                 A[j][i][k] = (ArrayB[j] * VariableA);

                  System.out.println(Arrays.deepToString(A));

然而,上面的代码只适用于前几个值。输出如下:

 [[[2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]]] 

任何帮助、想法或指针都将不胜感激,因为我不知道哪里出了问题,前 6 个值是整个预期的值,但数组也应该被分成单独的数组作为3-d 数组是数组的数组。

【问题讨论】:

    标签: java arrays matlab for-loop multidimensional-array


    【解决方案1】:

    对于初学者来说,你的循环是错误的。您的第一个循环从 0 迭代到 A.length,这很好,但您的下一个循环也从 0 迭代到 A.length,这是错误的,因为您的多维数组的第二级大小不同。

    试试吧:

    for (int j = 0; j < A.length; j++)
             for ( int i = 0; i < A[j].length; i++)
                 for (int k = 0; k < A[j][i].length; k++)
    

    【讨论】:

    • 谢谢。这些值现在在整个数组中是一致的。但是,当它打印到控制台时,它显示为 [[[ 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 ]]] 即矩阵没有单独显示。任何想法为什么会这样?不过再次感谢!
    • 乍一看,我会说用作其他维度大小的“N+1”和“K”的值实际上都是 1,但如果没有看到其余部分就不可能说您的代码并知道所有这些值是什么。
    • 能否请您简要解释一下您提供的代码,即 A[j].length 和 A[j][i].length 的含义,因为结果现在正在生成个人数组,但不是我期望的方式。所有数组的第一列的值本身存储为一个数组,而不是生成一个 1:N+1 列值的数组。
    • 在java中,多维数组实际上是一个数组,其元素依次是数组。当定义 double A[][][] = new double[X][Y][Z] 时,对象 A 是 X 元素的数组。这些元素中的每一个都是一个 Y 元素的数组,然后每个元素又是一个 Z 元素的数组,它们是你的数字。
    • 所以 A[j].length - A[j] 的值本身就是一个数组,您要询问该数组中的对象数。由于它被定义为多维数组,因此您确实知道这些数组中的每一个的长度为 (N+1),如您的代码中定义的那样,但它们可能都具有不同的长度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2017-12-31
    • 2012-11-06
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多