你应该可以直接这样做:
np.ndarray[double, ndim=1, mode="c"] arr = np.array([1,2,3], dtype=np.float64, order="c")
根据np.array
的文档:
order : {'C', 'F', 'A'}, optional
Specify the order of the array. If order is 'C' (default), then the
array will be in C-contiguous order (last-index varies the
fastest). If order is 'F', then the returned array
will be in Fortran-contiguous order (first-index varies the
fastest). If order is 'A', then the returned array may
be in any order (either C-, Fortran-contiguous, or even
discontiguous).
我的理解是,只有当您尝试传递的数组是从另一个非连续数组的某些切片生成的时,才需要使用np.ascontiguousarray
。如果您正在从头开始创建数组,那么这不是必要的。
例如:
a = np.arange(10)
a.flags['C_CONTIGUOUS']
b = a[::2]
b.flags['C_CONTIGUOUS']
c = np.ascontiguousarray(b)
c.flags['C_CONTIGUOUS']
另外,也许考虑使用
typed memoryview接口。
double[::1] arr = np.array([1,2,3], dtype=np.float64)