【发布时间】:2015-05-23 16:35:39
【问题描述】:
我在numpy 数组上有一个memoryview,并希望使用此memoryview 将另一个numpy 数组的内容复制到其中:
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: 只有长度为 1 的数组可以转换为 Python 标量 块引用
如果我从memoryview 复制到memoryview,或者从numpy 数组复制到numpy 数组,它工作正常,但是如何从numpy 数组复制到memoryview?
【问题讨论】:
-
但是你可以从第二个数组的内存视图中复制,对吧?
-
是的,但是这非常不舒服,特别是如果操作没有发生在顶部缩进级别。这意味着:在顶部缩进级别创建一个 cdef double[:,::1] 缓冲区,在下一步中将 np.ndarray 结果复制到我的缓冲区内存视图中,最后从那里复制到我的目标内存视图。
-
当您将内存视图链接到数组时,您不会
copy in。您只需定义一种使用数组数据缓冲区的方式。cython的目标是使操作足够清晰以创建高效的 C 代码。程序员的“舒适”(在通常的 Python 意义上)不是优先事项。
标签: numpy cython memoryview