以下问题是关于编程语言,尤其是Java的更高级的问题。现在困扰我很长时间的一件事是,Java没有为矩阵乘法提供开发人员友好的方法。人们无法阻止为此使用for循环。许多其他编程语言的确提供了内置功能,这使工作变得更加轻松。
不会是以下代码:
double[][] matrix1 = new double[m1][n1];
double[][] matrix2 = new double[m2][n2];
double[][] result = SomeNativeJavaLibrary.multiplyMatrices(matrix1, matrix2);
比以下代码更加方便,甚至更有效率:
double[][] matrix1 = new double[m1][n1];
double[][] matrix2 = new double[m2][n2];
double[][] result = new double[matrix1.length][matrix2[0]];
for (int i = 0; i < matrix1.length; i++) {
for (int j = 0; j < matrix2[0].length; j++) {
// Calculating the matrix product element by element
}
}
当然,每种编程语言都有其长处和短处。但是我不能想到为什么没有标准Java功能的特定原因。我们必须求助于第三方库。
我可以想到拥有这种本地库的几个优点,例如:
显然,也有缺点。谁能详细说明拥有内置功能以Java之类的编程语言进行矩阵运算的弊端?
答案 0 :(得分:0)
该问题接近“被定罪”,但让我们给出事实:
是的,精心设计的本机库可能胜过纯“ Java实现”。另一方面,例如, native 代码始终会为您打开简单的段错误。与某些本机代码中的段错误相比,人们通常更喜欢在JVM中接收异常形式。
除此之外,Java对性能的回答是:即时编译器。 JVM测量代码被调用的频率。当发现值得优化的代码时,它将使用运行时概要文件数据来生成机器代码。 将字节代码动态编译为机器代码的那一部分使Java应用程序有时胜过C / C ++代码。因为代码是在数据上下文中编译的,所以可以使用。
最后:Java并不是要成为一种“数字运算”语言。您可以将其用于此目的,然后确定:针对特定计算密集型任务精心设计的本机库可能会非常有用。您会看到,Java是一种通用语言,旨在用于许多不同的用例。如果您真的想进行硬代码编号处理,那么即使在2018年,您也可能希望使用Fortran。