2017-11-25 161 views
2

我不能将double转换为Nd4j.INDArray而不会丢失精度。Java双向INDArray丢失精度

double[] weight = new double[]{-0.13404223866376802,-0.11294084872465669,0.11232944517596409,-0.01687720880184701,0.13288394029423414,-0.06916641552096867,0.1518882606786481}; 
INDArray array = Nd4j.create(weight, new int[]{1, 7}); 
System.out.println(array); 

输出是

[-0.13, -0.11, 0.11, -0.02, 0.13, -0.07, 0.15] 

所需的输出应该是

[-0.13404223866376802,-0.11294084872465669,0.11232944517596409,-0.01687720880184701,0.13288394029423414,-0.06916641552096867,0.1518882606786481] 

如何与全精度转换?

+0

@LeoAso所说的背后是INDArray并非_actually_正在截断数据 - 它存储和操作整个double。这正是它的toString()方法所做的。他的回答允许你以你想要的精度格式化INDArray。 – andrewm921

回答

1

使用

int precision = 7; 
String printed = new NDArrayStrings(precision).format(this); 
System.out.println(printed); 

与任何你想要的精确度。 NDArrayStrings位于org.nd4j.linalg.string包中。