python - np.ascontiguousarray 与 np.asarray 与 Cython

标签 python c arrays numpy cython

跟进问题how to pass numpy array to Cython function correctly? :

当将 Cython 中的 numpy.ndarrays 传递给只处理连续数组的 C 函数时,做之间有区别吗:

np.ndarray[double, ndim=1, mode="c"] arr = np.ascontiguousarray(np.array([1,2,3],dtype=float))

np.ndarray[double, ndim=1, mode="c"] arr = np.asarray(np.array([1,2,3],dtype=float), order="c")

两者都需要吗? np.ascontiguous 是否已经暗示数组的格式可以分配给带有 mode=c 声明的数组?

最佳答案

docs for ascontiguousarray 声明它将返回一个 C 有序数组,所以是的,如果您使用 ascontiguousarray 然后您可以假设数据在 c 中排序模式。

然后要回答两者之间有什么区别,我们可以阅读源代码。

asarray ( link) 这样做:

return array(a, dtype, copy=False, order=order)

ascontiguousarray ( link ) 这样做:

return array(a, dtype, copy=False, order='C', ndmin=1)

因此,当您使用 order='C' 调用 asarray 时,与 ascontiguousarray 的唯一区别是您选择了 ndmin 的默认值,即 0 。这归结为这种差异,当您在单个数字而不是列表上使用这两种方法时:

print asarray(4,dtype='float',order='c').shape
()
print ascontiguousarray(4,dtype='float').shape
(1,)

这取决于你,但我更喜欢 ascontiguousarray,因为我经常依赖于处理数组的形状属性的可能性,并期望它是非空的。从某种意义上说,这就像同时调用 atleast1d

关于python - np.ascontiguousarray 与 np.asarray 与 Cython,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22105529/

相关文章:

c - 运行时错误 : Singly Link List program to insert a value

c - 这段C代码中的 "frec[v1[i]]++"是什么意思

c - 使用十六进制格式说明符打印按位 NOT 运算符

javascript - 在 unity C# 中手动将值分配给数组

vb.net 从数组中删除第一个元素

python - 元组中的多个 or 条件

python - 删除字符串列表中的字符

arrays - 点击 CollectionView Cell 按钮可播放特定阵列中的声音并从特定阵列中复制电影

python - Pandas 仅对某些列求和和计数

python - pymongo + gevent : throw me a banana and just monkey_patch?