請問在矩陣運算使用 ndarray.astype(np.int64) 為何會使element得到不對的值?
```python a = np.array([[1.0, 2.0], [3.0, 4.0]]) # [[1. 2.] # [3. 4.]] a_inv = np.linalg.inv(a) # array([[-2. , 1. ], # [ 1.5, -0.5]]) I = np.dot(a,a_inv) print(I) # [[1.0000000e+00 0.0000000e+00] # [8.8817842e-16 1.0000000e+00]] print(np.around(I)) #[[1. 0.] # [0. 1.]] print(I.astype(np.int64)) #[[1 0] # [0 0]] ``` 使用 np.around(I) 可以得到單位矩陣沒有問題, 但是使用 I.astype(np.int64) 強制把裡面element轉換為integer時,右下那個element就變成錯誤的值“0” 想問原因是?感謝
回答列表
-
2021/06/18 上午 00:40Chu Jia Ping贊同數:0不贊同數:0留言數:1
* 當使用 .astype(np.int64) 時會把小數點 **無條件捨去** * 右下的值其實是 0.9999999999999996,因此無條件捨去後就會變成 0(左上的 1.0 則變 1) * 你可以透過 index 把 element 抓出來看就會發現差異 ```python print(I[0][0]) # 1.0 print(I[1][1]) # 0.9999999999999996 ``` 參考資料:https://stackoverflow.com/questions/43910477/numpy-astype-rounding-to-wrong-value
