[英]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.