def __setitem__(self,index,value):
#import pdb; pdb.set_trace()
indices = self.compute_indices(index)
try:
if len(indices) == 1:
np.asarray(self).reshape(-1,order="F").__setitem__(indices,value)
else:
np.asarray(self).__setitem__(indices,value)
except (ValueError,IndexError):
#import pdb; pdb.set_trace()
if not self.size:
new_shape = [self.sizeof(s) for s in indices]
self.resize(new_shape,refcheck=0)
np.asarray(self).__setitem__(indices,value)
elif len(indices) == 1:
# One-dimensional resize is only implemented for
# two cases:
#
# a. empty matrices having shape [0 0]. These
# matries may be resized to any shape. A[B]=C
# where A=[], and B is specific -- A[1:10]=C
# rather than A[:]=C or A[1:end]=C
if self.size and not isvector_or_scalar(self):
raise IndexError("One-dimensional resize "
"works only on vectors, and "
"row and column matrices")
# One dimensional resize of scalars creates row matrices
# ai = 3
# a(4) = 1
# 3 0 0 1
n = self.sizeof(indices[0]) # zero-based
if max(self.shape) == 1:
new_shape = list(self.shape)
new_shape[-1] = n
else:
new_shape = [(1 if s==1 else n) for s in self.shape]
self.resize(new_shape,refcheck=0)
np.asarray(self).reshape(-1,order="F").__setitem__(indices,value)
else:
new_shape = list(self.shape)
if self.flags["C_CONTIGUOUS"]:
new_shape[0] = self.sizeof(indices[0])
elif self.flags["F_CONTIGUOUS"]:
new_shape[-1] = self.sizeof(indices[-1])
self.resize(new_shape,refcheck=0)
np.asarray(self).__setitem__(indices,value)
评论列表
文章目录