【问题标题】:Cython memoryview shape incorrect?Cython memoryview 形状不正确?
【发布时间】:2021-05-16 14:23:08
【问题描述】:

考虑以下创建一个大小为 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,)

【问题讨论】:

    标签: python arrays numpy cython memoryview


    【解决方案1】:

    它们在功能上是相同的。 memoryview 将形状存储在一个长度为 8 的静态分配数组中(通常 - 如果需要,最大维数是可配置的)。

    这样做的好处是可以直接从 Cython 访问该数组,无需间接和分配,因为它只是一个 C 数组。缺点是它给出了一个稍微令人惊讶的输出。

    ndim 以上的所有维度都与它的行为方式无关。

    【讨论】:

    • 啊,有道理。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    相关资源
    最近更新 更多