内存视图上的微积分(python数组)

时间:2013-11-22 22:53:13

标签: python arrays cython memoryview

我打算在python数组中使用memoryview:

...
cdef double[:, :] a = np.array([[1, 1, 0]])
cdef double[:, :] c = 0,5 * a * a.T

但它引发了一个错误:

  

'*'(double; double [:,:])

的操作数类型无效

在这种情况下我该怎么办?

1 个答案:

答案 0 :(得分:4)

获取标量和数组的乘积的能力是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