LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 254|回复: 0

PIL-风格:形状,步幅和子偏移量

[复制链接]
发表于 2024-1-25 18:01:46 | 显示全部楼层 |阅读模式


除了常规项之外, PIL 风格的数组还可以包含指针,必须跟随这些指针才能到达维度的下一个元素。例如,常规的三维 C 语言数组 char v[2][2][3] 可以看作是一个指向 2 个二维数组的 2 个指针:char (*v[2])[2][3]。在子偏移表示中,这两个指针可以嵌入在 buf 的开头,指向两个可以位于内存任何位置的 char x[2][3] 数组。

这是一个函数,当n维索引所指向的N-D数组中有 NULL 步长和子偏移量时,它返回一个指针

void *get_item_pointer(int ndim, void *buf, Py_ssize_t *strides,
                       Py_ssize_t *suboffsets, Py_ssize_t *indices) {
    char *pointer = (char*)buf;
    int i;
    for (i = 0; i < ndim; i++) {
        pointer += strides * indices;
        if (suboffsets >=0 ) {
            pointer = *((char**)pointer) + suboffsets;
        }
    }
    return (void*)pointer;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表