簡體   English   中英

將 INDArray 舍入到一定精度

[英]Rounding INDArray upto certain precision

尋找可以在 java 中對 INDArray 進行操作的類似類型的 function "np.round_(in_array, decimals = 2)"。 基本上想要將 INDArray 中的所有數字四舍五入到一定精度。

例如:給定一個數組 in_array = [.5538, 1.33354, .71445]

當我將它四舍五入到兩位數時,我期望 output 作為數組([0.55, 1.33, 0.71])

Nd4j 有一個正常的圓形 function 但不是指定的小數位數。 如果您只是出於格式化目的想要這樣做,我們可以執行以下操作:

import org.nd4j.linalg.string;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory;
INDArray arr = ..;
String rounded = arr.toString(new NDArrayStrings(yourPrecision));

yourPrecision 是您想要的小數位數,例如:2,3。 對於您的示例:

import org.nd4j.linalg.string;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory;
INDArray arr = Nd4j.create(new double[]{.5538, 1.33354, .71445});
String rounded = arr.toString(new NDArrayStrings(2));

編輯:因為看起來我們需要在實際的 function 本身中舍入它們,所以您必須使用自定義 java function 並手動迭代數組。 就像是:

for(int i = 0; i < arr.length(); i++) {
   arr.putScalar(i,myRounder(arr.getDouble(i),numPlaces);
}

執行此操作時請注意數據類型。

歸功於:https://www.studytonight.com/java-examples/how-to-round-a-number-to-n-decimal-places-in-java

這給出了一個相當好的解釋和警告。 您的自定義圓角器可能類似於:

public static double round(double num, int places)
{
    double scale = Math.pow(10, places);
    double roundedNum = Math.round(num * scale) / scale;
    return roundedNum;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM