2013-04-13 45 views
2

我得到一個堆棧跟蹤,我覺得很難理解:爲什麼當我嘗試重塑一個numpy數組時,memmap需要一個文件名?

screwed_up_code.py in atleast_4d(arr) 
    28 def atleast_4d(arr): 
    29  stshape = arr.shape 
    30  while len(stshape)<4: stshape+=(1,) 
    31  print arr.shape, stshape 
---> 32  return arr.reshape(stshape) 

/usr/lib/python2.7/dist-packages/numpy/core/memmap.pyc in __array_finalize__(self, obj) 
    255   if hasattr(obj, '_mmap'): 
    256    self._mmap = obj._mmap 
--> 257    self.filename = obj.filename 
    258    self.offset = obj.offset 
    259    self.mode = obj.mode 

AttributeError: 'memmap' object has no attribute 'filename' 

如果你想知道arr.shape = (192, 384, 6)stshape = (192, 384, 6, 1)


UPDATE

正如NPE的建議,我看着the bug report of a similar sounding AttributeError。那裏的一張海報把它歸咎於由於醃製ndarrays而迷失的屬性。我確實酸洗陣列和重新盤活當加載陣列像這樣:

newarr = numpy.ndarray(pickled_array) 
pickled_array = newarr     # use the recreated instead of the pickled arr 

我得到的警告,而不是例外,我的代碼運行:

Exception AttributeError: AttributeError("'NoneType' object has no attribute 'tell'",) in ignored 
Exception AttributeError: AttributeError("'NoneType' object has no attribute 'tell'",) in ignored 
Exception AttributeError: AttributeError("'NoneType' object has no attribute 'tell'",) in <bound method memmap.__del__ of memmap([ 85389.2734375, 125935.75  , 173624.09375 , 272958.78125 , 
     305687.65625 , 433026.3125 ], dtype=float32)> ignored 

我很幸福就夠了,我的代碼運行並將暫時擱置。

+1

如果你加入了SSCCE(http://sscce.org/) – NPE

+0

,我真的會幫助你,我希望我能。我所嘗試的所有SSCCE的問題是他們實際上工作並且不會產生這個問題。你可以看到'''atleast_4d'''是一個非常溫和的小函數。我正在交付一個形狀不規則的陣列(192,384,6)。當我給它一個相同大小的新創建的數組時,它不會發生。不知何故,我的代碼以這樣的方式準備數組,使得它在atleast_4d''內部爆炸。 – DrSAR

+0

這樣的聲音可能在當前的numpy中被修復。 (儘管這可能是1.7.x) – seberg

回答

3

這聽起來與this bug非常相似。

stack trace有一點不同,但代碼結束了在完全相同的點完全相同的異常失敗:

File "C:\Python26\Lib\site-packages\numpy\core\memmap.py", line 257, in __array_finalize__ 
    self.filename = obj.filename 
AttributeError: 'memmap' object has no attribute 'filename' 

numpy-discussion thread哪裏,這是首次報道表明,問題可能是相關的到this other ticket與酸洗memmap對象有關。無論如何,該線程值得一讀。

+0

你可能會做些什麼。這個''''ndarray'''的創建涉及到一些酸洗。謝謝 - 將調查並回來。 – DrSAR

+0

@DrSAR:當然。閱讀我剛剛鏈接的討論主題。 – NPE

+0

是的,我有哪些讓我相信你是對的。自從我編輯了顯示數據的問題以確認您的發現。非常感謝。 – DrSAR

相關問題