1

免责声明:本文作者对 C++ 和 Python 的了解有限,对 Java 和 Ruby 有足够的了解。

“OpenCL 编程指南”一书中的一个示例使用以下 OpenCL 自定义图形数据结构,以便 Dijkstra 算法在 OpenCL 设备上运行:

void generateRandomGraph(GraphData *graph, int numVertices, int neighborsPerVertex)
{
    graph->vertexCount = numVertices;
    graph->vertexArray = (int*) malloc(graph->vertexCount * sizeof(int));
    graph->edgeCount = numVertices * neighborsPerVertex;
    graph->edgeArray = (int*)malloc(graph->edgeCount * sizeof(int));
    graph->weightArray = (float*)malloc(graph->edgeCount * sizeof(float));

    for(int i = 0; i < graph->vertexCount; i++)
    {
        graph->vertexArray[i] = i * neighborsPerVertex;
    }

    for(int i = 0; i < graph->edgeCount; i++)
    {
        graph->edgeArray[i] = (rand() % graph->vertexCount);
        graph->weightArray[i] = (float)(rand() % 1000) / 1000.0f;
    }
}

此数据结构基于 Pawan Harish 和 PJ Narayanan 撰写的“使用 CUDA 在 GPU 上加速大型图形算法”一文中的示例。

基本上,它有三个数组:一个顶点数组V,每个顶点指向它在边数组中的相邻顶点E(一个顶点i+1的相邻顶点i紧跟在数组中的该顶点的相邻顶点E)。第三个数组用于边缘权重(还有两个更具体的 OpenCL 相关数组)。

如何在 Python/Numpy 中表示这个数据结构?我想在 PyOpenCL 中使用它。

4

2 回答 2

1
于 2011-10-17T11:56:18.657 回答
-1

没有该主题的专家,但这是某种邻接矩阵(http://en.wikipedia.org/wiki/Adjacency_matrix)。Numpy 核心数据类型是 n 维数组,所以这应该很简单。

于 2011-10-17T11:30:44.393 回答