簡體   English   中英

我可以在Cython中“寫入”內存視圖嗎?

[英]Can I `fwrite` a memory view in Cython?

是否可以使用ac fwrite函數將numpy數組寫入磁盤? 從Cython內存視圖文檔中,我了解到“它們可以處理C數組”,但我沒有看到此類示例。

這是我正在嘗試的:

cdef FILE *fptr
fptr = fopen("data.dat", "w")
cdef double[:] array = numpy.array([.5, 1.5, 2.5, -9, 0.0, 5])
fwrite(array, sizeof(double), array.size, fptr)

但是我收到以下編譯錯誤:

Error compiling Cython file:
------------------------------------------------------------
...
def write_values(file_path):
    """Tracer code to write values to a C file."""
    cdef FILE *fptr
    fptr = fopen("data.dat", "w")
    cdef double[:] array = numpy.array([.5, 1.5, 2.5, -9, 0.0, 5])
    fwrite(array, sizeof(double), array.size, fptr)
          ^
------------------------------------------------------------

write_with_c.pyx:23:11: Cannot assign type 'double[:]' to 'const void *'

這可能嗎?

根據文檔 ,您應該傳遞第一個元素的地址( double* 應該可以轉換為const void*而無需強制轉換),並且為了確保正確性,您可能希望使用cdef double[::1] array顯式聲明memoryview ,它強制執行C連續內存視圖,並產生最后幾行:

cdef double[::1] array = numpy.array([.5, 1.5, 2.5, -9, 0.0, 5])
fwrite(&array[0], sizeof(double), array.size, fptr)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM