我在Cython中创建了一个类型化的内存视图,并希望将其乘以一个标量:
import numpy as np
import math
cimport numpy as np
def foo():
N = 10
cdef np.double_t [:, :] A = np.ones(shape=(N,N),dtype=np.double_)
cdef int i,j
cdef double pi = math.pi
for i in range(N):
for j in range(N):
A[i,j] *= pi
return A
def bar():
N = 10
cdef np.double_t [:, :] A = np.ones(shape=(N,N),dtype=np.double_)
cdef double pi = math.pi
A *= pi
return A
函数foo()
可以完成这个任务,但不是很方便/易读。
然而,在函数bar()
中的代码行A *= pi
无法编译:Invalid operand types for '*' (double_t[:, :]; double)
。
是否有一种方法在Cython内存视图上执行此类广播操作?
np.sum
),那么这个cdef函数就不能是nogil
的,对吗? - avocado