У меня есть memoryview
на numpy
массив и хотите скопировать содержимое другого numpy
массива в него с помощью этого memoryview
:Копировать Numpy массив в memoryview
import numpy as np
cimport numpy as np
cdef double[:,::1] test = np.array([[0,1],[2,3]], dtype=np.double)
test[...] = np.array([[4,5],[6,7]], dtype=np.double)
Но почему это не возможно? Это заставляет меня говорить
TypeError: only length-1 arrays can be converted to Python scalars Blockquote
Он отлично работает, если я копирую из memoryview
в memoryview
, или из массива numpy
numpy
в массив, но как скопировать из numpy
массива в memoryview
?
Но вы можете скопировать из памяти на 2-й массив, не так ли? – hpaulj
Да, но это неудобно, особенно если операции не выполняются на верхнем уровне отступов. Это означает: создать буфер cdef double [:, :: 1] на верхнем уровне отступа, скопировать на следующем шаге результат np.ndarray в мою память буфера памяти и, наконец, оттуда до моего места назначения памяти. – macmallow
Когда вы связываете память с массивом, вы не копируете его. Вы просто определяете способ использования буфера данных массива. Цель в 'cython' состоит в том, чтобы сделать операции достаточно ясными, чтобы создать эффективный C-код. «Комфорт» программиста (в обычном смысле Python) не является приоритетом. – hpaulj