def dsplit(ary, indices_or_sections):
"""Splits an array into multiple sub arrays along the third axis.
This is equivalent to ``split`` with ``axis=2``.
.. seealso:: :func:`cupy.split` for more detail, :func:`numpy.dsplit`
"""
if ary.ndim <= 2:
raise ValueError('Cannot dsplit an array with less than 3 dimensions')
return split(ary, indices_or_sections, 2)
python类dsplit()的实例源码
def vsplit(ary, indices_or_sections):
"""Splits an array into multiple sub arrays along the first axis.
This is equivalent to ``split`` with ``axis=0``.
.. seealso:: :func:`cupy.split` for more detail, :func:`numpy.dsplit`
"""
if ary.ndim <= 1:
raise ValueError('Cannot vsplit an array with less than 2 dimensions')
return split(ary, indices_or_sections, 0)
def char2wordBB(self, charBB, text):
"""
Converts character bounding-boxes to word-level
bounding-boxes.
charBB : 2x4xn matrix of BB coordinates
text : the text string
output : 2x4xm matrix of BB coordinates,
where, m == number of words.
"""
wrds = text.split()
bb_idx = np.r_[0, np.cumsum([len(w) for w in wrds])]
wordBB = np.zeros((2,4,len(wrds)), 'float32')
for i in xrange(len(wrds)):
cc = charBB[:,:,bb_idx[i]:bb_idx[i+1]]
# fit a rotated-rectangle:
# change shape from 2x4xn_i -> (4*n_i)x2
cc = np.squeeze(np.concatenate(np.dsplit(cc,cc.shape[-1]),axis=1)).T.astype('float32')
rect = cv2.minAreaRect(cc.copy())
box = np.array(cv2.cv.BoxPoints(rect))
# find the permutation of box-coordinates which
# are "aligned" appropriately with the character-bb.
# (exhaustive search over all possible assignments):
cc_tblr = np.c_[cc[0,:],
cc[-3,:],
cc[-2,:],
cc[3,:]].T
perm4 = np.array(list(itertools.permutations(np.arange(4))))
dists = []
for pidx in xrange(perm4.shape[0]):
d = np.sum(np.linalg.norm(box[perm4[pidx],:]-cc_tblr,axis=1))
dists.append(d)
wordBB[:,:,i] = box[perm4[np.argmin(dists)],:].T
return wordBB
def dsplit(ary, indices_or_sections):
"""Splits an array into multiple sub arrays along the third axis.
This is equivalent to ``split`` with ``axis=2``.
.. seealso:: :func:`cupy.split` for more detail, :func:`numpy.dsplit`
"""
if ary.ndim <= 2:
raise ValueError('Cannot dsplit an array with less than 3 dimensions')
return split(ary, indices_or_sections, 2)
def vsplit(ary, indices_or_sections):
"""Splits an array into multiple sub arrays along the first axis.
This is equivalent to ``split`` with ``axis=0``.
.. seealso:: :func:`cupy.split` for more detail, :func:`numpy.dsplit`
"""
if ary.ndim <= 1:
raise ValueError('Cannot vsplit an array with less than 2 dimensions')
return split(ary, indices_or_sections, 0)
def _ros_read_images(self, stream_buffer, number, staleness_limit = 10.):
""" Reads images from a stream buffer
Parameters
----------
stream_buffer : string
absolute path to the image buffer service
number : int
The number of frames to get. Must be less than the image buffer service's
current buffer size
staleness_limit : float, optional
Max value of how many seconds old the oldest image is. If the oldest image
grabbed is older than this value, a RuntimeError is thrown.
If None, staleness is ignored.
Returns
-------
List of nump.ndarray objects, each one an image
Images are in reverse chronological order (newest first)
"""
rospy.wait_for_service(stream_buffer, timeout = self.timeout)
ros_image_buffer = rospy.ServiceProxy(stream_buffer, ImageBuffer)
ret = ros_image_buffer(number, 1)
if not staleness_limit == None:
if ret.timestamps[-1] > staleness_limit:
raise RuntimeError("Got data {0} seconds old, more than allowed {1} seconds"
.format(ret.timestamps[-1], staleness_limit))
data = ret.data.reshape(ret.data_dim1, ret.data_dim2, ret.data_dim3).astype(ret.dtype)
# Special handling for 1 element, since dstack's behavior is different
if number == 1:
return [data]
return np.dsplit(data, number)
def _rpc(self, x):
L, P, H = np.dsplit(x, 3)
return np.dstack([np.ones((x.shape[0], x.shape[1]), dtype=np.float32), L, P, H, L*P, L*H, P*H, L**2, P**2, H**2,
L*P*H, L**3, L*(P**2), L*(H**2), (L**2)*P, P**3, P*(H**2),
(L**2)*H, (P**2)*H, H**3])