我正在尝试编写如何使用 Java 8 找出矩阵中行列式的代码。这项工作有一些特殊情况。例如,当矩阵是上三角矩阵时。我使用以下代码使用 Python 3.6 编写了这项工作:
def is_upper_triangular(a, order):
for i in range(1, order):
if all(a[i][j] == 0 for j in range(order)):
return True
return False
这是非常简单和干净的代码,所以我想过用 Java 进行编码,但我没有找到任何 Java 的“全部”方法来使用它。我在这个网页中找到了一些有关此问题的信息,并给出了否定的解决方案。有没有其他方法可以解决我的问题。 这是我现在的 java 代码:
public static double detMatrix(double[][] matriz) {
if(matriz.length == 1)
return matriz[0][0];
if(matriz.length == 2)
return matriz[0][0] * matriz[1][1] - matriz[1][0] * matriz[0][1];
double det = 0;
for(int i=0; i<matriz.length; i++){
double[][] nm = new double[matriz.length-1][matriz.length-1];
for(int j=0; j<matriz.length; j++){
if(j != i){
for(int k=1; k<matriz.length; k++){
int indice = -1;
if(j<i)
indice = j;
else if(j>i)
indice = j - 1;
nm[indice][k-1] = matriz[j][k];
}
}
}
if(i % 2 == 0)
det += matriz[i][0] * detMatrix(nm);
else
det -= matriz[i][0] * detMatrix(nm);
}
return det;
}
谢谢
最佳答案
我知道您要求 Java 中的特定关键字功能,但不同的编程语言提供不同的方法。
例如,为什么不简单地使用 Arrays.fill(...)
而不是 all
运算符呢?看起来像的Python
for i in range(1, order):
if all(a[i][j] == 0 for j in range(order))
看起来像
for (int i = 0; i < a.length, i++) {
Arrays.fill(a[i], i+1, a[i].length, 0);
}
同样,Python 中的 any
操作可能看起来像是用更少的资源做更多的事情,但实际上它会崩溃为
for (Element element : allElements() {
if (element satisifies condition) {
... statements ...
}
}
使用 Java,上述循环可以工作,但它使效率低下变得明显。如果您确实不想看到代码在做什么,可以将其隐藏在方法中。
public List<int> findFives(int[][] a) {
...
}
关于java - 从 python 到 Java 的 all 和 any 的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44605704/