2024-06-01 04:19:08 发布
网友
在将numpy数组传递给c扩展时,最好的方法是什么?对于接口,我使用cython和numpy的PyArray_DATA
PyArray_DATA
假设我有x = np.empty((2000,10)),我想把这个数组传递给C,这样x[2000]对应于python中的x[0,1],而{}对应于{}。 我该怎么做?在
x = np.empty((2000,10))
x[2000]
x[0,1]
到目前为止,我尝试了np.copy(oder='C')、np.transpose()、np.reshape((-1))和{}的各种组合。在
np.copy(oder='C')
np.transpose()
np.reshape((-1))
你似乎对“列”和“行”这两个术语感到困惑。Row-major是order='c',而{}是{}。下面是一个演示aht的例子
Row-major
order='c'
shape = (2000, 10) buffer = "".join("{:5d}".format(i) for i in range(np.prod(shape))) x = np.ndarray(shape, 'S5', order='f', buffer=buffer) print x[0, 1] # ' 2000' print x.flags # C_CONTIGUOUS : False # F_CONTIGUOUS : True # OWNDATA : False # WRITEABLE : False # ALIGNED : False # UPDATEIFCOPY : False x = np.ndarray((2000, 10), 'S5', order='c', buffer=buffer) print x[0, 1] # ' 1' print x.flags # C_CONTIGUOUS : True # F_CONTIGUOUS : False # OWNDATA : False # WRITEABLE : False # ALIGNED : False # UPDATEIFCOPY : False
有几种方法可以在numpy中强制内存布局,下面是一些:
请注意,这3个方法都将生成一个“相同”的numpy数组,即对于所有python代码来说都是相同的:
print np.all(x.copy('c') == x.copy('f')) # True
你似乎对“列”和“行”这两个术语感到困惑。}是{}。下面是一个演示aht的例子
Row-major
是order='c'
,而{有几种方法可以在numpy中强制内存布局,下面是一些:
^{pr2}$请注意,这3个方法都将生成一个“相同”的numpy数组,即对于所有python代码来说都是相同的:
相关问题 更多 >
编程相关推荐