将Numpy数组复制到memoryview

时间:2015-05-23 16:35:39

标签: numpy cython memoryview

我在memoryview数组上有一个numpy,并希望使用此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:只能将length-1数组转换为Python标量   块引用

如果我从memoryview复制到memoryview,或从numpy数组复制到numpy数组,但是如何从{{{ 1}}数组到numpy

1 个答案:

答案 0 :(得分:3)

这些作业有效:

cdef double[:,::1] test2d = np.array([[0,1],[2,3],[4,5]], dtype=np.double)
cdef double[:,::1] temp = np.array([[4,5],[6,7]], dtype=np.double)
test2d[...] = 4
test2d[:,1] = np.array([5],dtype=np.double)
test2d[1:,:] = temp
print np.asarray(test2d)

显示

[[ 4.  5.]
 [ 4.  5.]
 [ 6.  7.]]

我在https://stackoverflow.com/a/30418422/901925处添加了一个答案,该答案在缩进的上下文中使用了此memoryview'缓冲区'方法。

cpdef int testfunc1c(np.ndarray[np.float_t, ndim=2] A,
                    double [:,:] BView) except -1:
    cdef double[:,:] CView
    if np.isnan(A).any():
        return -1
    else:
        CView = la.inv(A)
        BView[...] = CView
        return 1

它不会执行另一张海报想要的无副本缓冲区分配,但它仍然是一个高效的内存视图副本。