python - Cheapest way to get a numpy array into C-contiguous order? -
the following produces c-contiguous numpy array:
import numpy = numpy.ones((1024,1024,5))
now if slice it, result may not longer same. example:
bn = a[:, :, n]
with n
0 4. problem need bn
c-contiguous, , need many instances of a. need each bn
once, , want avoid doing
bn = bn.copy(order='c')
i don't want rewrite code such that
a = numpy.ones((5,1024,1024))
is there faster, cheaper way bn
doing copy?
background:
i want hash each slice of every a
, using
import hashlib hashlib.sha1(a[:, :, n]).hexdigest()
unfortunately, throw valueerror
, complaining order. if there fast way hash want, i'd use it.
as things stand, attempt coerce slice bn
c contiguous order going create copy.
if don't want change shapes you're starting (and don't need a
in c order), 1 possible solution start array a
in fortran order:
>>> = numpy.ones((1024, 1024, 5), order='f')
the slices f-contiguous:
>>> bn = a[:, :, 0] >>> bn.flags c_contiguous : false f_contiguous : true owndata : false ...
this means transpose of slice bn
in c order , transposing not create copy:
>>> bn.t.flags c_contiguous : true f_contiguous : false owndata : false ...
and can hash slice:
>>> hashlib.sha1(bn.t).hexdigest() '01dfa447dafe16b9a2972ce05c79410e6a96840e'
Comments
Post a Comment