【问题标题】:operator - undefined for argument types double[]运算符 - 未定义参数类型 double[]
【发布时间】:2016-01-26 16:47:36
【问题描述】:

我正在从事一个处理大量数据矩阵的项目。当我尝试为我的计算对其进行标准化时,我得到了错误

operator - is undefined for argument types double[]

我的代码如下:

import Jama.*;

public static Matrix normalize(Matrix ip_matrix, double[][] min_bound, double[][] max_bound)
{
    Matrix mat = ip_matrix.transpose();
    double[][] mat1 = mat.getArray(); // getting matrix as an array to perfom the computation.
    int nb_input = mat1[0].length;
    double[][] norm = new double[mat1[0].length][mat1[1].length]; // Initialize a default array to store the output, in the required dimension.

    for (int i = 0; i <= nb_input; i++)
    {
        norm[i] = (mat1[i] - min_bound[i] / (max_bound[i] - min_bound[i])); //The line where i get the error.

    }
    norm = norm.getMatrix();
    return norm;
    }

我基本上是一个 python 程序员,同样的逻辑在我的 python 代码中运行良好。我在 python 中使用 numpy。并在 java 中使用 JAMA 库。

我只是一个java初学者,所以请任何指导将非常感谢。

【问题讨论】:

  • mat1[i] 以及其他变量被定义为double[],你不能对整个数组进行数学运算,只能使用它的单个值。
  • 我正在使用 Eclipse IDE,部分错误在 max_bound[i​​] - min_bound[i​​] 中。这就是 IDE 强调错误的地方。
  • 有没有办法改正?可能是我初始化错误吗??
  • 你有一个二维数组。如果您像使用norm[i] 一样访问第一维中的变量,那么您基本上是在访问double[],您不能使用它执行加法或减法。想象一下它是一个 excel 表,一个维度代表列,另一个维度代表行。为了使其工作,您需要有两个 for 循环来访问每个维度中的每个元素。
  • 每个[] 代表一个维度,如果你想要一个像简单List 一样使用的数组,那么你可以写double[] array。它后面每增加一个[] 就代表另一个维度。请注意,通过提供 n 个括号访问维度为 n 的数组元素,将始终返回维度为 n-1 的数组。

标签: java matrix normalization jama


【解决方案1】:

您正在创建一个二维数组,也就是一个矩阵。在 Java 中,没有真正的二维数组。你在这里做的是创建一个doubles 的数组。

因此,当您使用[] 运算符访问数组时,您实际上得到了一个doubles 的一维数组。当您使用[][] 访问它时,您会得到一个double。所以这就是你得到错误的原因。您使用单个 [] 访问它,然后对它们进行减法。

【讨论】:

    猜你喜欢
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 2012-03-03
    • 2014-06-02
    • 2021-01-29
    • 1970-01-01
    相关资源
    最近更新 更多