2015-07-22 22 views
3

以下示例演示了此問題。使用memmap從文件加載的Numpy數據在格式化輸出中使用時引發異常

>>> import numpy as np 
>>> X = np.random.randn(10,3) 
>>> np.save("x.npy", X) 
>>> Y = np.load("x.npy", "r") 
>>> Y.min() 
memmap(-2.3064808987512744) 

>>> print(Y.min()) 
-2.3064808987512744 

>>> print("{}".format(Y.min())) 
-2.3064808987512744 

>>> print("{:6.3}".format(Y.min())) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: non-empty format string passed to object.__format__ 

沒有加載函數中的mode ='r',一切都按預期工作。這是一個錯誤?或者,我錯過了什麼?

反正有'提取'從memmap浮點值直接使用它?

編輯:

的「項目」的方法可以用於'的陣列的元素複製到一個標準的Python標量,並返回它。所以,下面的代碼工作:

>>> print("{:6.3}".format(Y.min().item(0))) 
    -2.31 

當你需要提取一個值來使用它時,是否有一個韻或理由?

+0

我得到這個錯誤與np 1.8.2和Py3;我不明白它與1.9.0和py2.7。所以一定有一些錯誤。格式機制取決於實現'__format__'方法的對象(在這個numpy數組或數據類型中)。 – hpaulj

+0

回到'%f'格式化方法怎麼樣?即使「有效」,格式化也不太合適,例如, 「-2。 '而不是'-2.03'。新的格式化方法對於'numpy'可能仍然執行不力。 – hpaulj

回答

2

https://github.com/numpy/numpy/issues/5543

ndarray應該提供格式,可以調整精度

根據這個問題,從去年二月,

n = np.array([1.23, 4.56]) 
print('{0:.6} AU'.format(n)) 

產生同樣的錯誤

TypeError: non-empty format string passed to object.__format__ 

我的猜測是numpymemmap對象有相同的問題,並可能有相同的解決方案。

很明顯py3樣式的format仍然是越野車,至少對於像numpy這樣的軟件包來說是增加的。

相關問題