MemoryView上的微积分(Python数组)
作者:互联网
我打算在python数组中使用memoryview:
...
cdef double[:, :] a = np.array([[1, 1, 0]])
cdef double[:, :] c = 0,5 * a * a.T
但这引发了一个错误:
Invalid operand types for ‘*’ (double; double[:, :])
在这种情况下我该怎么办?
解决方法:
能够获取标量和数组乘积的功能是numpy数组的功能(请参见broadcasting),但显然不是Cython的内存视图的功能.可以通过遍历内存块并将每个条目乘以所需的值来实现.另外,只要坚持使用numpy数组即可.
示例代码:
cdef double[:, :] c = np.empty((1, 3))
cdef int i
for i in range(3):
c[0, i] = a[0, i] * a[0, i] * 0.5
标签:cython,memoryview,arrays,python 来源: https://codeday.me/bug/20191030/1965786.html