Cython 内存视图形状不正确?
Cython memoryview shape incorrect?
考虑以下内容以创建大小为 4 的线性数组:
import numpy as np
cimport numpy as np
cdef np.float64_t [:] a = np.zeros(shape=(4),dtype=np.float64)
a.shape
应该是(4,)。然而:
print(a.shape)
>>> [4, 0, 0, 0, 0, 0, 0, 0]
这是怎么回事?原Python代码给出正确答案:
a = np.zeros(shape=(4),dtype=np.float64)
print(a.shape)
>>> (4,)
它们在功能上是相同的。内存视图将形状存储在长度为 8 的静态分配数组中(通常 - 如果需要,可以配置最大维数)。
这样做的好处是可以直接从 Cython 访问数组,没有间接访问也没有分配,因为它只是一个 C 数组。缺点是它给出了一个稍微令人惊讶的输出。
ndim
以上的所有维度与其行为方式无关。
考虑以下内容以创建大小为 4 的线性数组:
import numpy as np
cimport numpy as np
cdef np.float64_t [:] a = np.zeros(shape=(4),dtype=np.float64)
a.shape
应该是(4,)。然而:
print(a.shape)
>>> [4, 0, 0, 0, 0, 0, 0, 0]
这是怎么回事?原Python代码给出正确答案:
a = np.zeros(shape=(4),dtype=np.float64)
print(a.shape)
>>> (4,)
它们在功能上是相同的。内存视图将形状存储在长度为 8 的静态分配数组中(通常 - 如果需要,可以配置最大维数)。
这样做的好处是可以直接从 Cython 访问数组,没有间接访问也没有分配,因为它只是一个 C 数组。缺点是它给出了一个稍微令人惊讶的输出。
ndim
以上的所有维度与其行为方式无关。