2017-09-01 57 views
0

如果我做的:爲什麼輸出numpy.dot到memmap不起作用?

a = np.ones((10,1)) 
b = np.ones((10,1)) 
c = np.memmap('zeros.mat', dtype=np.float64, mode='w+', shape=(10,10), order='C') 

a.dot(b.T, out=c) 

我越來越:

ValueError: output array is not acceptable (must have the right type, nr dimensions, and be a C-Array)

我檢查從錯誤消息的所有條件,他們似乎適合:

>>> print(a.dtype == b.dtype == c.dtype) 
>>> print(np.dot(a, b.T).shape == c.shape) 
>>> print(c.flags['C_CONTIGUOUS']) 

True 
True 
True 

當我與替換C :

c = np.zeros((10,10)) 

它的工作原理。

我在做什麼錯?

+0

使用c = np.asarray(c)有助於解決問題。 (github.com/numpy/numpy/issues/7124) – RKI

回答

2

它不一定要匹配dtype;它也必須有類型,如type(c)cnumpy.memmap實例,而不是numpy.ndarray,因此檢查失敗。

按照numpy.memmap docs中的建議,您可以改爲使用mmap.mmap來映射文件並創建一個由mmap支持的numpy.ndarray作爲其緩衝區。你可以看看numpy.memmap implementation,看看可能涉及到什麼。

+0

我能夠使它與提示表單一起工作:https://github.com/numpy/numpy/issues/7124。我用c = np.asarray(c)。 – RKI

相關問題