我想知道是否(以及如何)可以在python中创建空的c类型数组。如果我想用零来初始化一个数组,下面的代码可以很好地工作:
from ctypes import *
data = [0 for i in xrange(10)]
a = ((c_float *10))(*data)
但是,如果data是None
值的列表,我会收到一条错误消息:
data = [None for i in xrange(10)]
a = ((c_float *10))(*data)
TypeError: float expected instead of NoneType instance
有没有一种方法可以初始化和数组为None或Null?
**EDIT 1:**我之所以想要一个None/Null的数组,是因为我想把这个数组上传到GPU上。如果我用零来初始化我的数组,那么将呈现零。但是,如果我将其初始化为NULL(如c中所定义),则不会呈现任何内容。
**EDIT 2:**使用c_float
的原因是为了兼容OpenGL,我需要将我的数据转换成c_float
。
**编辑3:**如果data
由零组成,则以下代码将呈现一串位置为0/0的点。我希望将NULL
值发送到GPU不会导致渲染任何点。
glBindBuffer(GL_ARRAY_BUFFER, vbo)
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(data), data)
glVertexPointer(n_COORDINATES_PER_VERTEX, GL_FLOAT, 0, 0)
glDrawArrays(GL_LINE_STRIP, 0, len(data))
**EDIT 4:**在python中可能需要使用NULL
的另一个使用案例:根据opengl website,下面介绍如何在GPU上分配内存:
glBufferData(GL_ARRAY_BUFFER, SizeInBytes, NULL, GL_STATIC_DRAW)
如果我在我的python代码中这样做,我会得到以下错误:NameError: global name 'NULL' is not defined
但一定有一种方法可以在Python中做到这一点,对吗?
3条答案
按热度按时间ogsagwnx1#
c_float
没有‘None’的等价值,因此不能将None
存储在c_float
中。请参阅python
ctypes
文档中的表格--有一些类型支持None
--但没有一种类型同时支持浮点数和None
。您必须使用另一种数据类型,以某种方式单独记录
None
值,或者找到一种方法将None
表示为适合您的应用程序的浮点数。ajsxfq5m2#
C_浮点值为空值是什么意思?在C中,NULL是零,所以基本上您希望有一个零的数组,这可以通过转换None的数组来实现,例如
编辑:如果值为None,则看起来您不想绘制任何内容,在这种情况下,没有办法使用带有‘Nothing’的c_Floats,因为NULL为0,最好的方法是将数组设置为NULL,并且不使用
if
条件绘制任何内容dffbzjpn3#
是否要通过ctype传递空数组指针?使用
None
表示空。你不能有一个空的浮点值,但是你可以有一个空的浮点数组指针。就像@Anurag说的那样,如果你不想画任何东西,就不要调用绘制函数。