Numpy CApi从列到行的顺序更改

2024-06-01 04:19:08 发布

您现在位置:Python中文网/ 问答频道 /正文

在将numpy数组传递给c扩展时,最好的方法是什么?对于接口,我使用cython和numpy的PyArray_DATA

假设我有x = np.empty((2000,10)),我想把这个数组传递给C,这样x[2000]对应于python中的x[0,1],而{}对应于{}。 我该怎么做?在

到目前为止,我尝试了np.copy(oder='C')np.transpose()np.reshape((-1))和{}的各种组合。在


Tags: 方法numpydatanp数组cythonemptytranspose
1条回答
网友
1楼 · 发布于 2024-06-01 04:19:08

你似乎对“列”和“行”这两个术语感到困惑。Row-majororder='c',而{}是{}。下面是一个演示aht的例子

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中强制内存布局,下面是一些:

^{pr2}$

请注意,这3个方法都将生成一个“相同”的numpy数组,即对于所有python代码来说都是相同的:

print np.all(x.copy('c') == x.copy('f'))
# True

相关问题 更多 >