【问题标题】:Cython C-array initializationCython C 数组初始化
【发布时间】:2014-09-22 13:09:28
【问题描述】:

我想做

cdef int mom2calc[3]
mom2calc[0] = 1
mom2calc[1] = 2
mom2calc[2] = 3

以更紧凑的方式。类似于

cdef int mom2calc[3] = [1, 2, 3]

这是一个无效的 Cython 语法。

注意:

cdef int* mom2calc = [1, 2, 3]

不是一个选项,因为我无法(自动)将其转换为内存视图。

【问题讨论】:

    标签: cython


    【解决方案1】:
    cdef int mom2calc[3]
    mom2calc[:] = [1, 2, 3]
    

    这适用于原始指针(尽管当时没有检查边界)、内存视图和固定大小的数组。它只适用于一维,但这通常就足够了:

    cdef int mom2calc[3][3]
    mom2calc[0][:] = [1, 2, 3]
    mom2calc[1][:] = [4, 5, 6]
    mom2calc[2][:] = [7, 8, 9]
    

    【讨论】:

    • 我有一个Cython post,您或许可以提供见解。
    • 您可以像这样在一行中完成:cdef int[3][3] arr2d = [range(3), (3, 4, 5), [6, 7, 8]]。请注意,这也适用于各种可迭代类型。
    【解决方案2】:
    cdef int[3] mom2calc = [1, 2, 3]
    

    这是应该的。 Cython 测试中的 C 数组初始化示例是例如here.

    【讨论】:

      猜你喜欢
      • 2015-12-25
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 2018-01-15
      • 2013-09-12
      • 1970-01-01
      相关资源
      最近更新 更多