def __getitem__(self, slc):
if isinstance(slc, slice):
slc = [slc]
start, shape = [], []
for s, n in zip(slc, self.shape):
if isinstance(s, int):
s = slice(s, s+1)
b, e = s.start or 0, s.stop or n
if b < 0: b = n+b # remove neg begining indices
if e < 0: e = n+e # remove neg ending indices
if e < b: e = b # disallow negative sizes
if e > n: e = n # fix over-slices
start.append(b)
shape.append(e-b)
idx = np.ravel_multi_index(start, self.shape, order='F')
ptr = self._arr.value + idx * np.dtype(self.dtype).itemsize
ptr = c_ulong(ptr)
ld = self._leading_dim
return self._backend.dndarray(self._backend, tuple(shape),
self.dtype, ld=ld, own=False, data=ptr)
评论列表
文章目录